-8

私のプログレについてお聞きしたいです。これの主な目的は、「結果」配列を「tab1」および「tab2」配列から収集したデータで埋めることです。誰でも確認できますか、なぜ結果がそれほど奇妙になるのですか? ありがとうございました。

#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;}
4

3 に答える 3

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];
于 2013-10-13T10:20:48.267 に答える
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(" ");

また、ループのようなマジックナンバーfor(i=0;i<30;i++)を使用するのはかなり悪い習慣です。おそらく、サイズ値に定数を使用する必要があります(ループと配列宣言の両方で使用できます。配列が10エレメントのみ?

于 2013-10-13T10:26:01.457 に答える
0
if(tab1[i] != '\0') 
result[i] = tab1[i];
else if (tab2[i] !='\0') 
result[i] = tab2[i];
else printf(" ");`

これはまだ間違っています。結果に tab2 を割り当てるときにはすでに 6 になっているため、tab1 とタブ 2 を割り当てるために 2 つの for ループを使用する必要があります。

于 2013-10-13T11:20:42.793 に答える