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
Arraytempcharray
。我的代码有什么问题
//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')