Sponsored Content
Top Forums Programming Logical Error With Type Conversion In C Post 303021887 by Azrael on Monday 20th of August 2018 12:07:39 AM
Old 08-20-2018
Logical Error With Type Conversion In C

So, I'm into about 650 lines of some code I'm working on. So I'll try to explain instead of flooding this post. Say I have some code like this:

Code:
int main() {
    int i, j;
    char data[INPUT_BUFF];

    printf("Gimme something: ");
    fgets(data, INPUT_BUFF, stdin);

    for (j = 0; j < data[INPUT_BUFF]; j++){
    switch(data[j]){
    case 0: 
        if(j == 'e'){
            atoi(data);
            data[j] = ranit(e_array);
            sprintf( data, "%d", data );
        }
    case 1: 
        if(j == 'm'){
            atoi(data);
            data[j] = ranit(m_array);
            sprintf( data, "%d", data );
        }
    case 2: 
        if(j == 'n'){
            atoi(data);
            data[j] = ranit(n_array);
            sprintf( data, "%d", data );
        }
    case 3: 
        if(j == 'o'){
            atoi(data);
            data[j] = ranit(o_array);
            sprintf( data, "%d", data );
        }
    case 4: 
        if(j == 'y'){
            atoi(data);
            data[j] = ranit(y_array);
            sprintf( data, "%d", data );
        }

     }
     }

     for (i = 0; i < INPUT_BUFF; i++){
         printf("%x\n", (int)data[(int)i]);
     }

     return 0;
}

I have a switch statement in the above that only checks for the characters in the word 'money'. The entire alphabet would have been too much to put here. The function ranit() grabs a random element out of the array it is past. That function has been checked and works perfect. In the case all the elements are numbers. I've tried to do this a lot of different ways, but what I want to do is after checking for a matching character, replace it with a random element in from the corresponding arrays that contain integers.

I tried using atoi() to make the 'data' character array able to hold integers. That way I wouldn't get an error about mismatching types. At some point I could have sworn itoa worked with gcc, but I now see this is no longer part of the standard library. I tried using sprintf() to convert the data array back to chars for the next iteration of the loop.

When I run the code I notice the random numbers aren't displayed, but the hex equivalents for the ascii values of the word 'money':

Code:
$ ./test 
Gimme something: money
6d
6f
6e
65
79

I'm unsure if I'm assigning the values wrong or if sprintf won't allow for the same source and destination values. All the examples I found would put this in a new variable or array name, but I need to have it in the same for the next loop iteration. So maybe I should be using something else?

No warnings or errors from the compiler. Just strictly a logical error at this point. Any suggestions much appreciated.
 

9 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Error in creating logical partition

Dear Members, I am using SCO-Unix 5.0.5. I have created 2 logical drives but some of the blocks are overlapped and are now giving warning during startup. I have used fsck to settle the problems but to no avail. Kindly help me to sort out the problem. Thanks (3 Replies)
Discussion started by: nagendrajaiswal
3 Replies

2. Shell Programming and Scripting

Does KSH support data type conversion?

Hello,everyone here. I'm coding with KSH to achieve exploring the disk space and judging whether it closes to overflow.But It seems that no one way to convert a string variable to integer. df | read A B C D E F G H I J K L print ${L} Can I convert L to integer type? Thanks for... (2 Replies)
Discussion started by: joshuaduan
2 Replies

3. Shell Programming and Scripting

error during run: St9bad_alloc - Getting this error while using some conversion progr

Hi all, It will be very useful If you spare some time with me for this worrying error. I am calling a conversion program which is written in C++ for converting a file format to different format. It was working fine for this past 2 yrs. But now it is not working since the file size has been... (1 Reply)
Discussion started by: sathu_pec
1 Replies

4. AIX

Type of Logical Volume lost after vgexport/gvimport process

Hi, I have the next doubt about of lost of characteristic of LV in my original configuration # lsvg -l ifxvg ifxvg: LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT aw64m_01 jfs 1 1 1 open/syncd N/A aw64m_02 jfs 1... (1 Reply)
Discussion started by: cerber0
1 Replies

5. UNIX for Dummies Questions & Answers

Build Error: error: dereferencing pointer to incomplete type

I'm getting the following Error: prepare_pcap.c: In function `prepare_pkts': prepare_pcap.c:127: error: dereferencing pointer to incomplete type prepare_pcap.c:138: error: dereferencing pointer to incomplete type ==================================== This is the part of the relevant... (8 Replies)
Discussion started by: katwala
8 Replies

6. Shell Programming and Scripting

Logical error

I have this script to uvscan-update. Seems like that i am getting logical error at the end of the script. It is updating the script and also giving the error message to update it manually. I have deleted the DAT files to see if it will create new and it does. Below is the error and the script: ... (1 Reply)
Discussion started by: mk07md
1 Replies

7. Shell Programming and Scripting

Military type format date/time conversion

Hello All, I have a requirement to convert a 12 hour format to 24 hour time format and the sample input /out put is below Input Time format : Nov 2 2011 12:16AM Out Put Format : Nov 2 2011 0:16 Input : Nov 2 2011 4:16PM Out Put: Nov 2 2011 16:16 I have done this using a... (6 Replies)
Discussion started by: jambesh
6 Replies

8. Programming

type conversion C, atoi()

In the book "The C programming language"; second edition, chapter 2.7 there is a snippet which is supposed to: "convert a string of digits into its numeric equivalent". int atoi(char s) { int i, n; n = 0; for ( i = 0; s >= '0' && s <= '9'; ++i) n = 10 * n + (s -... (4 Replies)
Discussion started by: tornow
4 Replies

9. Shell Programming and Scripting

Logical if error

Hi All, I am writing a simple script to read a file and display the lines with char count between 20 and 25. I am stuck with the if condition here. Tried a lot but still getting an error on the if condition # if && if && My script is very simple as below, not able to understand... (7 Replies)
Discussion started by: nss280
7 Replies
Glib::Error(3pm)					User Contributed Perl Documentation					  Glib::Error(3pm)

NAME
Glib::Error - Exception Objects based on GError SYNOPSIS
eval { my $pixbuf = Gtk2::Gdk::Pixbuf->new_from_file ($filename); $image->set_from_pixbuf ($pixbuf); }; if ($@) { print "$@ "; if (Glib::Error::matches ($@, 'Gtk2::Gdk::Pixbuf::Error', 'unknown-format')) { change_format_and_try_again (); } elsif (Glib::Error::matches ($@, 'Glib::File::Error', 'noent')) { change_source_dir_and_try_again (); } else { # don't know how to handle this die $@; } } DESCRIPTION
Gtk2-Perl translates GLib's GError runtime errors into Perl exceptions, by creating exception objects based on Glib::Error. Glib::Error overloads the stringification operator, so a Glib::Error object will act like a string if used with print() or warn(), so most code using $@ will not even know the difference. The point of having exception objects, however, is that the error messages in GErrors are often localized with NLS translation. Thus, it's not good for your code to attempt to handle errors by string matching on the the error message. Glib::Error provides a way to get to the deterministic error code. You will typically deal with objects that inherit from Glib::Error, such as Glib::Convert::Error, Glib::File::Error, Gtk2::Gdk::Pixbuf::Error, etc; these classes are provided by the libraries that define the error domains. However, it is possible to get a base Glib::Error when the bindings encounter an unknown or unbound error domain. The interface used here degrades nicely in such a situation, but in general you should submit a bug report to the binding maintainer if you get such an exception. METHODS
scalar = Glib::Error::new ($class, $code, $message) scalar = $class->new ($code, $message) o $code (Glib::Enum) an enumeration value, depends on $class o $message (string) Create a new exception object of type $class, where $class is associated with a GError domain. $code should be a value from the enumeration type associated with this error domain. $message can be anything you like, but should explain what happened from the point of view of a user. integer = $error->code This is the numeric error code. Normally, you'll want to use "value" instead, for readability. string = $error->domain The error domain. You normally do not need this, as the object will be blessed into a corresponding class. string = $error->location The source line and file closest to the emission of the exception, in the same format that you'd get from croak() or die(). If there's non-ascii characters in the filename Perl leaves them as raw bytes, so you may have to put the string through Glib::filename_display_name for a wide-char form. boolean = $error->matches ($domain, $code) o $domain (string) o $code (scalar) Returns true if the exception in $error matches the given $domain and $code. $domain may be a class name or domain quark (that is, the real string used in C). $code may be an integer value or an enum nickname; the enum type depends on the value of $domain. string = $error->message The error message. This may be localized, as it is intended to be shown to a user. Glib::Error::register ($package, $enum_package) o $package (string) class name to register as a Glib::Error. o $enum_package (string) class name of the enum type to use for this domain's error codes. Register a new error domain. Glib::Error will be added @package::ISA for you. enum_package must be a valid Glib::Enum type, either from a C library or registered with "Glib::Type::register_enum". After registering an error domain, you can create or throw exceptions of this type. scalar = Glib::Error::throw ($class, $code, $message) scalar = $class->throw ($code, $message) o $code (Glib::Enum) an enumeration value, depends on $class o $message (string) Throw an exception with a Glib::Error exception object. Equivalent to "croak (Glib::Error::new ($class, $code, $message));". string = $error->value The enumeration value nickname of the integer value in "$error->code", according to this error domain. This will not be available if the error object is a base Glib::Error, because the bindings will have no idea how to get to the correct nickname. SEE ALSO
Glib COPYRIGHT
Copyright (C) 2003-2011 by the gtk2-perl team. This software is licensed under the LGPL. See Glib for a full notice. perl v5.14.2 2012-05-24 Glib::Error(3pm)
All times are GMT -4. The time now is 08:50 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy