Подскажите ,что не так?Когда программа выводит результат ,то в начале показывает знак вопроса либо не то что нужно

Задание: увеличить числа в строчке вдвое Original:fgg 55 hhj 66 Result:�fgg 110 hhj 132 Либо так: Original: gjugfujf Result: �gjugfujf 152 fhj gjugfujf 152 fhj 112 92928

int letters(char ch);
char test[]=" ";
char orig[81],result[81],dig[13];
int radix=10;

    printf("Будь ласка введіть рядок\n");
    printf("Введіть рядок,слова*англійські* та цифри повинні бути записані через пробіли: \n");
    ch = gets(test);
    
        char *p;int d;
        strcpy(orig,test);
        p=strtok(test," ");
        while (p != NULL)
        {if ((d=atol(p))==0)
           {strcat(result,p);strcat(result," ");}
        else{sprintf(dig,"%d",d*2);strcat(result,dig);strcat(result," ");}
        p=strtok(NULL," ");}
        printf("Original:%s\nResult:%s\n",orig,result);
    
  
    ch = getchar(); 
    break;

Ответы (1 шт):

Автор решения: AlexGlebe

Функция gets использует буфер test и записывает туда данные. Так как у вас буфер очень маленький char test[]=" "; происходит переполнение и порча памяти. Эта функция считается устаревшей, и рекомендуется использовать другую, в которой аргументом задаётся предельный размер буфера.

Во первых задайте буфер побольше и используйте fgets вместо gets :

enum { bufsize = 80 } ;
char test [ bufsize ] ;

fgets ( test , bufsize , stdin ) ;

// стирание буквы перевода строки
test[strlen(test)-1] = '\00';
→ Ссылка