Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 不能突破“一个”;而";环_C_Arrays_Dynamic_Char_Segmentation Fault - Fatal编程技术网

C 不能突破“一个”;而";环

C 不能突破“一个”;而";环,c,arrays,dynamic,char,segmentation-fault,C,Arrays,Dynamic,Char,Segmentation Fault,我正在将二维char数组转换为二维int数组,如果字符串中出现\0或\n时,我需要中断循环。该代码给出了分段错误。 Array的定义为,索引小于1000,并且已存储二维charArraytempcharray。我的代码有什么问题 //Array[tempCount][1000]; for(int i=0;i<tempCount;i++) { strtok(tempCharArray[i]," "); while(tempCharArray[i]!="\0" || tempCh

我正在将二维
char
数组转换为二维
int
数组,如果字符串中出现
\0
\n
时,我需要中断
循环。该代码给出了分段错误。
Array
的定义为,索引小于1000,并且已存储二维
char
Array
tempcharray
。我的代码有什么问题

//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;
}
//数组[tempCount][1000];
对于(inti=0;i来说,(a)字符文字和字符串文字,以及(b)while循环逻辑有点混淆

更改此行:

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

请注意,编译器应该警告您错误(a)-我希望您启用了警告


编辑:从后面的评论中可以看出,
tempCharArray
实际上可能是一个字符串数组?在这种情况下,您需要这样做来解决问题(a):

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


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

如果
tempCharArray
char
数组,则您试图将单个字符与完整字符串进行比较。这不会达到您希望的效果。相反,请将其与字符文本进行比较:

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

  • 您需要使用
    &
    而不是
    |
    ,因为只要条件为真,循环就会继续(在您的情况下,只要
    tempcharray[i]
    '\0'
    '\n'
  • 您需要使用单引号,因为您需要比较字符文字
这导致了

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

这不应该编译。tempCharArray是一个二维数组,我需要查看位于tempCharArray[I]位置“I”的字符串末尾我也有一种强烈的感觉,你使用非标准VLAs。它看起来像是一个<代码>:STD::向量< /代码>将更好地满足你的需求。@克里斯:问题是标签<代码>代码> >代码> STD::向量< /代码>可能不是一个选项。@ PaulR,哦,没有注意到C++标签被删除。如果OP标记了C++,那么它最好愿意使用C++。。我认为
|
也需要是
&
?tempCharArray是一个二维数组,我需要查看位于'tempCharArray[I]'位置I的字符串的末尾。好的-我现在已经更新了答案-请确保在将来的问题中包含此类信息。
char*tempcharray[tempCount]
仍然存在分段故障。您需要使用调试器来确定分段故障的原因。
while(strcmp(tempCharArray[i],"")!=0 && strcmp(tempCharArray[i],"\n")!=0)
while(tempCharArray[i]!='\0' || tempCharArray[i]!='\n')
while (tempCharArray[i] != '\0' && tempCharArray[i] != '\n')