【问题标题】:Weird results in c [closed]c中的奇怪结果[关闭]
【发布时间】:2013-10-13 10:17:37
【问题描述】:

我想问你我的前卫。这个的主要目的是用从“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;}

【问题讨论】:

  • 您预计会发生什么?究竟发生了什么?
  • 你永远不会为结果分配任何东西!` tab2[i]==result[i]` 仅检查值是否相同!
  • 部分是因为== != =

标签: c string


【解决方案1】:

除了上面这个块的 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 numbersfor(i=0;i&lt;30;i++) 是非常糟糕的做法,您可能应该使用一个常量作为大小值(然后您可以在循环和数组声明中使用它。以及为什么当数组只有 10 个元素时循环到 30?

【讨论】:

  • 我认为,这是真正的问题。它从不向结果数组分配任何东西。
【解决方案2】:

在你的函数中检查空终止字符:

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

【讨论】:

  • 还有,tab1[i] == result[i];意思是?我猜应该是 tab1[i] = result[i];
  • @billhoo:很好看:)
【解决方案3】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    相关资源
    最近更新 更多