我有一个奇怪的问题,连接的输出在每个字符串输入之间有一个新行。我尝试了几种不同的东西,例如。删除动态内存分配,将字符串相互复制然后连接。同样的问题也在那里。有什么想法吗?
输入:
> one
> two
输出:
> Result of concatenation: one
> two
这是代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
/* code */
char string1[100];
char string2[100];
char *concat;
fgets(string1,100,stdin);
fgets(string2,100,stdin);
unsigned int size = strlen(string1) + strlen(string2);
concat = (char *) malloc(sizeof(char) * size);
if (concat==NULL)
{
exit(0);
}
strcat(concat,string1);
strcat(concat,string2);
printf("Result of concatenation: %s",concat);
return 0;
}
最佳答案
对于初学者来说,fgets
函数可以将换行符附加到输入的字符串中。你应该删除它。例如
fgets(string1,100,stdin);
string1[ strcspn( string1, "\n" ) ] = '\0';
fgets(string2,100,stdin);
string2[ strcspn( string2, "\n" ) ] = '\0';
其次,您在分配内存时忘记了终止零。而不是
unsigned int size = strlen(string1) + strlen(string2);
你必须写
size_t size = strlen(string1) + strlen(string2) + 1;
此外,分配的内存未初始化。你必须写
concat[0] = '\0';
在这些声明之前
strcat(concat,string1);
strcat(concat,string2);
并且不要忘记释放分配的内存。
free( concat );
关于在 C 中连接字符串。在输出中换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58223895/