在C中连接字符串时,如何用一个空格更改换行符?
首先,我必须提到,作为一名初学者,我正在学习C语言中的字符串。 我想做的是从用户那里获取两个字符串作为输入,并将它们连接起来。以下是我所做的:在C中连接字符串时,如何用一个空格更改换行符?,c,concatenation,newline,fgets,c-strings,C,Concatenation,Newline,Fgets,C Strings,首先,我必须提到,作为一名初学者,我正在学习C语言中的字符串。 我想做的是从用户那里获取两个字符串作为输入,并将它们连接起来。以下是我所做的: char firststring[40], secondstring[40]; printf ("Enter first string: "); fgets (firststring, 40, stdin); printf ("Enter second string: "); fgets (secondstring, 40, stdin); strc
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还会读取换行符,因此输出如下所示:
你好
世界
我尝试使用put
代替fgets,效果很好,但有太多人表示不使用该功能。然后我发现我可以在第一个fgets
之后使用strcspn
删除换行符,但这并没有给我一个我想要的单词间距。
所需输出: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 );
前提是第一个字符串有足够的空间附加存储在数组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;
}
从调用fgets
输入的字符串中删除新行字符的一般方法如下
string[ strcspn( string, "\n" ) ] = '\0';
啊。知道了。非常感谢你。我不太明白strcspn是如何工作的,所以我想不出用那种方式。你可能想把
firststring
放大,以避免strcpy中潜在的未定义行为(firststring+n+1,secondstring)代码>这就是我最初删除新行的方式。感谢您的回答使用#define n40
不是比enum{N=40}更好吗代码>?@intmain更糟,因为宏没有作用域。
string[ strcspn( string, "\n" ) ] = '\0';