2401_89115052 2025-09-16 23:42 采纳率: 37.5%
浏览 11

C语言二维数组与指针

想问下这道题为什么选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

  • 写回答

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 个字符,打印输出结果就能得出正确结果。

    最终答案可能跟你的题意不同,这里给出的理解和代码可能不完全符合你的要求,如果你有更多信息,请提供更多信息。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月16日