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

时间:2019-10-03 17:08:05

标签: 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;
}

2 个答案:

答案 0 :(得分:1)

对于初学者来说,功能def plot_graph(self): data_movingAvg = [go.Scatter(x=self.df2.index,y=[self.df2['lt_ma']])] layout = go.Layout( title='DistanceAnalysis', xaxis=dict( title= 'Time', showgrid=False, zeroline=False, ticklen= 5, gridwidth= 2 ), yaxis=dict( title= 'Distance', showgrid=False, zeroline=False, ticklen= 5, gridwidth= 2 ), showlegend= False ) py.iplot(go.Figure(data=data_movingAvg, layout=layout), filename='basic-bar') 可以将换行符附加到输入的字符串中。您应该将其删除。例如

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);

答案 1 :(得分:0)

来自man page

  

char *fgets(char *restrict s, int n, FILE *restrict stream);

     

...

     

fgets()函数应从流中将字节读取到数组中   由s指向,直到读取n−1个字节,或者读取或读取<newline>   并传输到s ,否则遇到文件结束条件。   然后,该字符串以空字节结尾。

您可能会将\n读取的fgets(换行符)包括在串联的字符数组中。