我的目标是循环一组预定义的字符串,同时在不使用计数器变量的情况下在每行上打印每个字符串。我已注释掉的行是工作代码,但需要一个计数器。它下方的四条线让我难过。
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);
}
,由于invalid type argument of 'unary *'
,程序无法编译。
然后我将char *p=*astring;
更改为char *p=astring;
并收到initialization from incompatible pointer type
的警告
然后我还尝试了char *p=**astring;
并收到了此编译器警告:initialization makes pointer from integer without a cast
我必须与明星混淆,或者我正在努力做不可能的事情?有没有人有解决方案?
答案 0 :(得分:2)
# If checking if a User object is member of a @group
@user.member_of_group?(@group)
=> returns true or false
# If checking if a Group object has a member @user
@group.has_user_member?(@user)
=> returns true or false
答案 1 :(得分:2)
你可以写
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 */ };
答案 2 :(得分:0)
我想出了一种方法:
int main(int argc,char* argv[]){
char *astring[500]={"ABC","DEF","GHI","JKL",NULL};
char **p=astring;
while (*p != NULL){
printf("%s\n",*p);
*p++;
}
return 0;
}