gpt4 book ai didi

c - 在 C 中没有 for 循环或计数器的循环字符串

转载 作者:太空狗 更新时间:2023-10-29 15:32:15 25 4
gpt4 key购买 nike

我的目标是循环遍历一组预定义的字符串,同时在不使用计数器变量的情况下将每个字符串打印在自己的行中。我注释掉的行是工作代码,但需要一个计数器。它下面的四行让我很困惑。

int main(int argc,char* argv[]){
char *astring[500];
astring[0]=(char*)"ABC";
astring[1]=(char*)"DEF";
astring[2]=(char*)"GHI";
astring[3]=(char*)NULL;
//long count;
//for (count=0;count<4;count++){
//printf("%s\n",astring[count]);
//}
char *p=*astring;
while (*p++){
printf("%s\n",*p);
}
return 0;
}

我尝试了以下变体但没有成功。

这段代码:

    char *p=*astring;
while (*p++){
printf("%s\n",*p);
}

编译正常,但在执行时,发生段错误,程序立即退出。

我试过:

    while (**p++){
printf("%s\n",*p);
}

并且由于 'unary *' 的无效类型参数,程序将无法编译。

然后我将 char *p=*astring; 更改为 char *p=astring; 并收到了 initialization from incompatible pointer type 的警告>

然后我也尝试了 char *p=**astring; 并收到了这个编译器警告:initialization makes pointer from integer without a cast

我一定是被星星弄糊涂了,或者我想做的事情是不可能的?有人有解决方案吗?

最佳答案

你可以写

for ( char **p = astring; *p; ++p ) puts( *p );

或者如果你的编译器不支持C99那么把指针声明放在数组声明之后

char *astring[500];
char **p;

//...

for ( p = astring; *p; ++p ) puts( *p );

如果您有一个包含 T 类型元素的数组,那么表达式中使用的数组将转换为指向其第一个元素的指针。所以如果有声明

T array[N];

然后你就可以写了

T *p = array;

在您的程序中,您有一个类型为 char * 的元素数组。所以T对应char *。你可以写

typedef char * T;
T astring[500];
T *p = astring;

p 的类型为 char **

考虑到不需要应用转换

astring[0]=(char*)"ABC";
astring[1]=(char*)"DEF";
astring[2]=(char*)"GHI";
astring[3]=(char*)NULL;

你可以写

char *astring[500] = { "ABC", "DEF", "GHI"/*, NULL */ }; 

关于c - 在 C 中没有 for 循环或计数器的循环字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32102858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com