2767184930 发表于 2020-12-12 01:39:47

作业求助

以下程序的输出结果是()。
#include "stdio.h"
#include "string.h"
int main( )
{
        char a="How are you";
        strcpy(a+4,"do ");
        printf("%s",a);
        return 0;
}
A. How do      B. How do you      C. do      D. How are you do
这道题为什么选A?那个a+4是什么意思,
然后如果没有a+4是不是选B

一世轻尘 发表于 2020-12-12 07:53:30

数组名就是就指向数组第一个元素的指针,那么数组名+i就是指向数组中第i个值的指针。然后利用strcpy函数将字符串do放入了a及之后的位置,所以选A。没有strcpy那行的语句时选B,如果把a+4换成a则选c。

风过无痕1989 发表于 2020-12-12 09:55:40

A答案正确,strcpy()从 a 数组的第 4 个字符开始,将其参数2的内容拷贝到数组

4goodworld 发表于 2020-12-12 14:01:02

对于 a是一个地址,或者你理解为什么数组指针都行
a+4就是向后挪动4个单位长度的地址
strcpy函数的用法就是将“do ”这个复制到以a+4对应的起始处的一段内存中
按照你的理解,你会理解为 把are 替换成了 do
但是printf %s 读取的时候,它理解的是以'\0'结尾的字符串,你觉得“do ”这个有没有一个'\0'的存在?
具体再体会下图

其实you 不见了没?没有,但是为什么不显示,是因为 '\0'结尾的字符串 所导致
页: [1]
查看完整版本: 作业求助