想问下这道题为什么选B?
#include<stdio.h>
#include<string.h>
int main()
{
char v[6][10]={"efg","abcd","mnopq","hijkl","rstuvw","xyz"};
*p[6];
*t;
inti,j;
for(i=0;i<6;i++)
{
p[i]=v[i];
}
for(i=0;i<5;i++)
{
for(j=i+1;j<6;j++)
{
if (strcmp(p[i],p[j])>0)
{
t=p[i];p[i]=p[j];p[j]=t;
}
}
}
printf("%s%s\n",v[2],p[2]);
return0;
}
A)mnopq mnopq
B)mnopq hijkl
C)hijkl hijkl
D)hijkl mnopq
C语言二维数组与指针
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
6条回答 默认 最新
阿里嘎多学长 2025-09-16 23:42关注阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程
解答
这道题目可能是问关于数组和指针的使用。根据C语言的标准,
v是一个二维数组,大小是6*10 = 60个字符。然而,你写的是char v[6][10]={"efg"``,这里面的"efg"只有 3 个字符,剩下5*10 = 50` 个位置都是空格。当你打印
v的时候,使用的是printf("%s", v);,%s代表一个 string,结束符是\0。由于"efg"只有 3 个字符,所以v最后会被自动补充一个\0,也就是 4 个字符。这就导致printf("%s", v);会打印"efg\0\0\0...",直到遇到第一个\0。所以,选项 B 可能是正确的,因为这里的问题确实是由于数组
v未被完全初始导致的。如果你要写成全填充,请使用以下代码:
#include <stdio.h> int main() { char v[6][10] = { {"efg" "..." "..." "..." "..." "..." "..." "..." "..." "..."}, // 这里填充满 10 个字符 {}, {}, {}, {}, {} }; printf("%s\n", v[0]); return 0; }在这里,我们将数组
v全填充了10个字符,打印输出结果就能得出正确结果。最终答案可能跟你的题意不同,这里给出的理解和代码可能不完全符合你的要求,如果你有更多信息,请提供更多信息。
解决 无用评论 打赏 举报