I have troubles printing arrays of characters in C

0

the problem is that the following code prints nothing. And I tried very hard, using different methods, I used fixed sized arrays, I tried to print the array from a void function, I tried printf and sprintf, I tried with static s variable, I tried to loop the array and print charcacter the result is always the same, 0 errors, 0 warnings and never print the result. After about 30 seconds, the program automatically terminate with the following output:

Convert 56 to ascii: Process returned -1073741819 (0xC0000005) execution time : 4.763 s Press any key to continue.

Here's the code (I maybe used too many includes, but this is because I tried everything):

#include <ctype.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void reverse(char s[])
{
    int c, i, j;

    for(i = 0, j = strlen(s)-1; i < j; i++,j++){
        c = s[i];
        s[i] = s[j];
        s[j] = c;
    }
}

char * itoascii(int n)
{       char *s = malloc(10);
        /*if(s == NULL)
            return NULL;*/
        int i, sign;

        if((sign = n) < 0)
            n = -n; // if n is negative, make it positive. And store the sign into sign
        i = 0;
        do {
            s[i++] = n % 10 + '0'; // turn a digit into a string and then increment i
        }while(( n /= 10) > 0);

        if(sign < 0)
            s[i++] = '-';
        s[i] = '\0';
        reverse(s);

        return s;
}

int main()
{   int n;
    n = 56;
    printf("Convert %d to ascii:\n", n);
    char *buf = itoascii(n);
    sprintf(buf, "%s\n");
    return 0;
}
arrays
c
string
return
asked on Stack Overflow Oct 26, 2020 by ionecum

2 Answers

0

Yes, the problem was the y++ stuff. The fact is that I copied this code from a K&R edition with errata. In the book I found y++ and I blindy trusted the function, I never consider it in my debugging assuming the problem was due to improper pointer usage or other things.

Sure the code may be improved. printf es better than sprintf and I also must free the allocated memory with malloc. I also have to remove the extra unused include.

Thanks for your comments!

answered on Stack Overflow Oct 26, 2020 by ionecum
0

Code has at least these problems:

  1. 10 insufficient for large int. Suggest at least 12. Maybe sizeof(int)*CHAR_BIT/3 + 3 for an approximate generalization.

  2. n = -n; is UB when n == INT_MIN.

  3. Wrong increment

     //for(i = 0, j = strlen(s)-1; i < j; i++,j++){
     for(i = 0, j = strlen(s)-1; i < j; i++,j--){
    

User contributions licensed under CC BY-SA 3.0