我在使用fgets
和strcat
时遇到了一些问题(我尝试将fgets
替换为scanf
并且程序正常运行)。似乎strcat
无效。
char name[256];
char text[256];
fgets(name,250,stdin);
strcat(name,".txt");
printf("%s\n",name);
输出是(在单独的行中):
d
.txt
答案 0 :(得分:2)
您必须从输入中删除换行符。像这样:
fgets(name, 250, stdin);
char *p = strchr(name, '\n');
if (p)
*p = '\0';
strcat(name, ".txt");
显然,你想在那里添加一些错误检查,但这证明了这个想法。
答案 1 :(得分:1)
因为'\n'
函数中也会使用fgets
,所以它会显示出来。为简单起见,您可以使用scanf
:
int main() {
char name[256];
char text[256];
scanf("%250s",name);
strcat(name,".txt");
printf("%s\n",name);
}
答案 2 :(得分:1)
使用很少使用的函数strcspn
,这变得简单且容易出错:
if (fgets(name, 250, stdin) != NULL) {
strcpy(name + strcspn(name, "\n"), ".txt");
...
}
strcspn
函数计算不 \n
的字符数; strcspn中的c表示补充。
因此,无论名称是否包含换行符,.txt
将始终添加到正确的位置。