2016-03-31 2 views
1

У меня возникают некоторые проблемы при использовании fgets и strcat (я попытался заменить fgets на scanf и программа работала). Кажется, strcat не работает.Проблемы при использовании fgets и strcat

char name[256]; 
char text[256]; 

fgets(name,250,stdin); 
strcat(name,".txt"); 
printf("%s\n",name); 

Выход (в виде отдельных линий):

d 
.txt 
+1

Вам нужно удалить новую строку из названия после 'fgets' –

+0

Взгляните на [мой ответ на другой вопрос] (http://stackoverflow.com/a/36341266/434551). Хотя вопросы разные, решение точно такое же. –

+0

Если 'strcat' не работал, вы бы не увидели' .txt' в выводе –

ответ

2

Вы должны удалить строку из ввода. Например:

fgets(name, 250, stdin); 
char *p = strchr(name, '\n'); 
if (p) 
    *p = '\0'; 
strcat(name, ".txt"); 

Очевидно, что вы хотите добавить некоторые ошибки, но это демонстрирует эту идею.

+1

. Предполагается, что символ новой строки находится в 'name', что может быть не всегда так. Возможно, используйте 'strchr'. –

+0

@FiddlingBits Хорошая точка. Ред. –

1

потому что '\n' также потребляется в вашей функции fgets, он будет отображаться именно так. Вы можете использовать scanf вместо простоты:

int main() { 
    char name[256]; 
    char text[256]; 

    scanf("%250s",name); 
    strcat(name,".txt"); 
    printf("%s\n",name); 
} 
+0

Примечание: 'scanf ("% s ")' только читает до следующего пробела, см. Http://stackoverflow.com/questions/1247989/how-do-you-allow-spaces-to-be-entered-using- scanf для деталей. –

+0

@RolandIllig это правильно, так как в примере показано что-то вроде имени файла «d.txt», нецелесообразно ловить пространство, и он не требует дополнительных функций, чтобы отбросить окончательный «\ n». Однако, если намерение кода действительно для получения строки отверстия, включая пробел, вкладки, ... тогда вы правы – Pooya

1

Используя редко используемую функцию strcspn, это становится простым и подвержен ошибкам:

if (fgets(name, 250, stdin) != NULL) { 
    strcpy(name + strcspn(name, "\n"), ".txt"); 
    ... 
} 

strcspn функция подсчитывает количество символов, которые являются не\n; c в strcspn означает дополнение. Следовательно, независимо от того, содержит или нет имя в новой строке или нет, значение .txt всегда будет добавлено в правильное положение.

Смежные вопросы