-5

char2 次元配列を 2次元配列に変換しています。文字列にorが含まれている場合は、ループintから抜け出す必要があります。このコードは、セグメンテーション違反を引き起こします。is の定義とインデックスが 1000 未満で、2 次元配列が既に格納されています。私のコードの問題は何ですか?while\0\nArraychartempCharArray

//Array[tempCount][1000];

for(int i=0;i<tempCount;i++)
{
   strtok(tempCharArray[i]," ");
   while(tempCharArray[i]!="\0" || tempCharArray[i]!="\n")
   {
      Array[i][arrayindex]=atoi(strtok(NULL," ");
      arrayindex++;
   }
   arrayindex=0;
}
4

3 に答える 3

4

(a) char リテラルと文字列リテラルの間、および (b) while ループ ロジックとの間で少し混乱しています。

この行を変更します。

while(tempCharArray[i]!="\0" || tempCharArray[i]!="\n")

に:

while(tempCharArray[i]!='\0' && tempCharArray[i]!='\n')

コンパイラが間違い (a) について警告するはずだったことに注意してください - 警告が有効になっていると思いますか?


編集:tempCharArray実際には文字列の配列である可能性がある後続のコメントから見えますか? その場合、問題 (a) を修正するためにこれを行う必要があります。

while(strcmp(tempCharArray[i],"")!=0 && strcmp(tempCharArray[i],"\n")!=0)

文字列==orと比較できないことに注意してください!=- を使用する必要がありますstrcmp

もちろん、ロジックのバグとその修正は引き続き適用されます。

于 2013-05-11T15:21:23.047 に答える
1

tempCharArrayが配列の場合char、単一の文字を完全な文字列と比較しようとしています。それはあなたが望むことをしません。代わりに、文字リテラルと比較します。

while(tempCharArray[i]!='\0' || tempCharArray[i]!='\n')

二重引用符ではなく重引用符を使用していることに注意してください。

于 2013-05-11T15:21:43.643 に答える