首先,我必须提到,我是刚刚学习C语言中的字符串的初学者。我想做的是从用户那里得到2个字符串作为输入,然后将它们连接起来。所以我是这样做的。
char firststring[40], secondstring[40];
printf ("Enter first string: ");
fgets (firststring, 40, stdin);
printf ("Enter second string: ");
fgets (secondstring, 40, stdin);
strcat(firststring, secondstring);
printf("%s", firststring);
问题是当用户输入第一个字符串时 fgets也会读取换行符 所以输出的结果是这样的:
Hello
World
我试着用 puts
而不是fgets,而且效果很好,但是太多人说不要用这个功能。后来我发现我可以用 strcspn
前后 fgets
去掉换行符,但这并没有给我一个我想要的词之间的空格。希望的输出。Hello World
我得到了什么。HelloWorld
有什么建议吗?
你可以用下面的方法
printf ("Enter first string: ");
fgets (firststring, 40, stdin);
printf ("Enter second string: ");
fgets (secondstring, 40, stdin);
size_t n = strcspn( firststring, "\n" );
firststring[n] = ' ';
strcpy( firststring + n + 1, secondstring );
只要firststring有足够的空间来追加存储在数组secondstring中的字符串。
下面是一个示范程序
#include <stdio.h>
#include <string.h>
int main(void)
{
enum { N = 40 };
char firststring[N], secondstring[N];
printf( "Enter first string: " );
fgets( firststring, N, stdin );
printf( "Enter second string: " );
fgets( secondstring, N, stdin );
size_t n = strcspn( firststring, "\n" );
firststring[n] = ' ';
strcpy( firststring + n + 1, secondstring );
puts( firststring );
return 0;
}
它的输出可能看起来像
Enter first string: Hello
Enter second string: World!
Hello World!
一个通用的方法,从调用 fgets
是以下内容
string[ strcspn( string, "\n" ) ] = '\0';