使用fgets和strcat时出现问题

时间:2016-03-31 20:53:57

标签: c

我在使用fgetsstrcat时遇到了一些问题(我尝试将fgets替换为scanf并且程序正常运行)。似乎strcat无效。

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

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

输出是(在单独的行中):

d
.txt

3 个答案:

答案 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将始终添加到正确的位置。