在 C 中连接字符串。在输出中换行

标签 c concatenation c-strings

我有一个奇怪的问题,连接的输出在每个字符串输入之间有一个新行。我尝试了几种不同的东西,例如。删除动态内存分配,将字符串相互复制然后连接。同样的问题也在那里。有什么想法吗?

输入:

> 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/

相关文章:

c - TCP 上的可变长度消息

c++ - 错误] ISO C++ 禁止指针和整数之间的比较 [-fpermissive]

concatenation - 如何使用 OOCalc 中的 CONCATENATE 函数引用报价

python - 合并两列,忽略空单元格并添加分隔符

python - numpy.concatenate float64(101,1) 和 float64(101,)

c - 在 C 中添加一个指向数组(指针)开头的指针

创建一个字符串数组并打印它

c - 未定义对确定价格的引用;计算;打印结果

c - C语言中的字符串输入

java - 如何区分能被 2 整除和能被 4 整除?