我有一个奇怪的问题,即连接的输出在每个字符串输入之间都带有新行。我尝试了一些不同的事情,例如。删除动态内存分配,将字符串相互复制然后进行串联。同样的问题在那里。有什么想法吗?
输入:
> 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;
}
答案 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
(换行符)包括在串联的字符数组中。