在遍历数组C时获得奇怪的输出
我有一个在遍历数组C时获得奇怪的输出,c,arrays,loops,C,Arrays,Loops,我有一个char指针数组,例如char*arrayHolder[20]。当我尝试在数组中循环时,如果用户在第二个输入上输入项目,我会得到意外的输出 例如: input> 1 2 3 1 2 3 input>2 3 4 3 3 3 1 导致错误的循环: for(i = 0; arrayHolder[i] != NULL; ++i) { printf("%c\n", arrayHolder[i]); 令牌输入代码: char* token; char buffe
char
指针数组,例如char*arrayHolder[20]
。当我尝试在数组中循环时,如果用户在第二个输入上输入项目,我会得到意外的输出
例如:
input> 1 2 3
1
2
3
input>2 3 4
3
3
3
1
导致错误的循环:
for(i = 0; arrayHolder[i] != NULL; ++i) {
printf("%c\n", arrayHolder[i]);
令牌输入代码:
char* token;
char buffer [100];
char input[25000];
int i;
char *tokenHolder[300];
int pos = 0;
while(1) {
printf("repl> ");
fgets(buffer, sizeof(buffer), stdin);
token = strtok(buffer, " ");
while(token != NULL) {
tokenHolder[pos] = token;
token = strtok(NULL, " ");
pos++;
}
在第二次
循环前初始化pos=0
pos = 0; //<-- This.
while(token != NULL)
{
tokenHolder[pos] = token;
token = strtok(NULL, " ");
pos++;
}
你能把你填充数组的代码贴在哪里吗?@pranitkothari编辑过。无限while循环在for循环的范围内。仅供参考。编辑,现在,我在尝试输出tokenHolder[I]时遇到Seg错误,而在尝试tokenHolder[I][I]时,我得到了初始描述中描述的行为。我测试了printf(“%s\n”,tokenHolder[2]),看看我的值输入是否正确,它们是否正确。@user2757849您需要tokenHolder作为char*tokenHolder[300];或字符令牌持有者[300];?一个是包含每个元素300个字符的指针数组,另一个只是一个包含300个字符的数组?@user2757849。。现在检查。可以解释行的功能是如何工作的吗?我使用了一个指针数组,因为如果我没有,编译器会给我这个警告,警告:赋值从指针生成整数,而不使用强制转换[enabled by default]token=strtok(buffer,”);我使用char-token和char-tokenHolder[200]进行了测试,然后我打印了第一个初始位置,但没有得到任何输出和大量警告。
int main()
{
char* token;
char buffer [100];
int i;
char *tokenHolder[300];
int pos = 0;
int row = 0;
while(1)
{
printf("repl> ");
fgets(buffer, sizeof(buffer), stdin);
token = strtok(buffer, " ");
pos = 0;
while(token != NULL){
(tokenHolder + row)[pos] = token;
token = strtok(NULL, " ");
pos++;
}
(tokenHolder + row)[pos] = '\0';
for(i =0; (tokenHolder + row)[i] != NULL; ++i){
printf("%s\n", (tokenHolder + row)[i]);
}
row++;
if(row > 2) // Breaking of row exceeds 10. You can enter your suitable condition.
break;
}
return 0;
}