我想问你关于我的编程。这个的主要目的是用“tab1”和“tab2”数组中的数据收集来填充“result”数组。任何人都可以检查,为什么结果如此奇怪?谢谢。
#include <stdio.h>
#include <stdlib.h>
void laczenie(char tab1[],char tab2[])
{
int i;
char* result =(char*) malloc(100*sizeof(char));
for(i=0;i<30;i++)
{
if(tab1[i] != '\0') tab1[i]==result[i];
else if (tab2[i] !='\0')tab2[i]==result[i];
else printf(" ");
}
for(i=0;i<30;i++)printf("%c",result[i]);
free(result);
}
int main()
{
char x[10]={'n','a','p','i','s','1'};
char y[10]={'n','a','p','i','s','2'};
//char x[10] = {"napis1"};
//char y[10] = {"napis2"};
laczenie(x,y);
return 0;}
答案 0 :(得分:3)
在您的函数中,检查空终止字符:
if(tab1[i] != '\0')
但这里的空终止字符在哪里?
char x[10]={'n','a','p','i','s','1'};
尝试:
char x[7]={'n','a','p','i','s','1','\0'};
另请注意,tab1[i]==result[i];
将tab[1]
与result[i]
进行比较,如果您要将result[i]
分配给tab1[i]
,请使用赋值运算符=
:
tab1[i]=result[i];
答案 1 :(得分:3)
除了上面的LihOs回答,这个块看起来不对:
if(tab1[i] != '\0')
tab1[i]==result[i];
else if (tab2[i] !='\0')
tab2[i]==result[i];
else printf(" ");
您不是要将tab1[i]
或tab2[i]
中的值分配给result[i]
吗?
if(tab1[i] != '\0')
result[i] = tab1[i];
else if (tab2[i] !='\0')
result[i] = tab2[i];
else printf(" ");
同样在循环中使用magic numbers:for(i=0;i<30;i++)
是非常糟糕的做法,你可能应该使用一个常量作为大小值(然后你可以在循环和数组中使用它)当数组只有10个元素时,为什么循环到30?
答案 2 :(得分:0)
if(tab1[i] != '\0')
result[i] = tab1[i];
else if (tab2[i] !='\0')
result[i] = tab2[i];
else printf(" ");`
这仍然是错误的,因为当你将tab2分配给结果时我将已经是6,所以你必须使用两个for循环,我想为分配tab1和tab 2