Подскажите ,что не так?Когда программа выводит результат ,то в начале показывает знак вопроса либо не то что нужно
Задание: увеличить числа в строчке вдвое 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';