#为何 q明明已经指向了字符串数组中的第一个字符串,为何输出会是下图结果?
int main()
{
char a[][10]={"dddd","aaaa","cccc","bbbb","eeee","llll","kkkk","oooo","pppp","cccc"};
int i;
for(i=0;i<10;i++)
{
printf("%s\n",a[i]);
}
printf("\n");
char *q=a[0];
printf("%s",*q);
// exchange(a[0]);
// printf("排序后");
// for(i=0;i<10;i++)
// {
//
// printf("%s\n",a[i]);
//
// }
}
printf("%s",*q); 输出用 *q, 此时 *q 等价于 a[0][0] 即字符 'd' , 而前面格式控制符用 %s ,显然前后不符,会出错的。如想输出的是字符串,则将q前面的 * 星号删除即可。
printf("%s",q);
因为q=a[0],这样q就是一个字符串了,不能再加星号了,*q是一个字符,不是字符串,用%s输出就崩溃了
该回答引用GPTᴼᴾᴱᴺᴬᴵ
问题出在最后一行的printf语句上,应该是printf("%s", q)而不是printf("%s", *q)。
·
因为char *q=a[0]将q指向了字符串数组a的第一个元素,即第一个字符串"dddd"的首地址。而在最后一行的printf("%s",q)中,q表示取出q指向的内存地址中存储的值,即字符串"dddd"的第一个字符'd'。而不是字符串"dddd"本身。
·
正确的方式应该是printf("%s", q),这样会输出q指向的字符串。