-5

我正在将二维char数组转换为二维数组,如果或出现在字符串中int,我需要跳出while循环。此代码给出分段错误。is 的定义和索引小于 1000 并且二维数组已经存储。我的代码有什么问题?\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)字符文字和字符串文字之间以及(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)

请注意,您不能将字符串==或进行比较!=- 您需要使用strcmp.

当然,逻辑错误及其修复仍然适用。

于 2013-05-11T15:21:23.047 回答
1

如果tempCharArraychar数组,则您正在尝试将单个字符与完整的字符串进行比较。那不会做你想做的事。而是将其与字符文字进行比较:

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

注意使用引号而不是双引号。

于 2013-05-11T15:21:43.643 回答
0
  • 您需要使用&&而不是因为只要||条件为真,循环就会继续(在您的情况下,只要是tempCharArray[i]'\0' '\n'
  • 您需要使用单引号,因为您比较字符文字

这将导致

while (tempCharArray[i] != '\0' && tempCharArray[i] != '\n')
于 2013-05-11T15:27:09.167 回答