鱼C论坛

 找回密码
 立即注册
查看: 1835|回复: 10

[已解决]C的初级问题

[复制链接]
发表于 2022-7-7 11:10:28 | 显示全部楼层 |阅读模式
1鱼币
#include <stdio.h>
#define MSG "kkkkk"
#include <string.h>
int main()
{
        char ar[] = MSG;
        const char * pt = MSG;
        return 0;
}
为什么打印ar和打印pt两者不一样,书上就提了一句,没细讲
最佳答案
2022-7-7 11:10:29
没看到哪里有不同啊
#include <stdio.h>
#define MSG "kkkkk"
#include <string.h>
int main()
{
        char ar[] = MSG;
        const char * pt = MSG;
        printf("AR=%s........PT=%s\n",ar,pt);
        printf("AR_len=%d........PT_len=%d\n",strlen(ar),strlen(pt));
        return 0;
}
/*
PS D:\wp> ./ct9
AR=kkkkk........PT=kkkkk
AR_len=5........PT_len=5
PS D:\wp> 
*/

最佳答案

查看完整内容

没看到哪里有不同啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-7 11:10:29 | 显示全部楼层    本楼为最佳答案   
没看到哪里有不同啊
#include <stdio.h>
#define MSG "kkkkk"
#include <string.h>
int main()
{
        char ar[] = MSG;
        const char * pt = MSG;
        printf("AR=%s........PT=%s\n",ar,pt);
        printf("AR_len=%d........PT_len=%d\n",strlen(ar),strlen(pt));
        return 0;
}
/*
PS D:\wp> ./ct9
AR=kkkkk........PT=kkkkk
AR_len=5........PT_len=5
PS D:\wp> 
*/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-7 11:23:18 | 显示全部楼层
wp231957 发表于 2022-7-7 11:20
没看到哪里有不同啊

不是的朋友打印%P你试试,然后我突然想起来了,之前学C的时侯我给忘了,他的这个ar指向的是MSG副本的第一个元素,但是pt指向MSG的第一个元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-7 11:23:57 | 显示全部楼层
wp231957 发表于 2022-7-7 11:20
没看到哪里有不同啊

我真是忘了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-7 11:26:11 | 显示全部楼层
老沫白 发表于 2022-7-7 11:23
不是的朋友打印%P你试试,然后我突然想起来了,之前学C的时侯我给忘了,他的这个ar指向的是MSG副本的第一 ...

开玩笑啊,我要%p  干啥  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-7 11:26:13 | 显示全部楼层
wp231957 发表于 2022-7-7 11:20
没看到哪里有不同啊

静态储存我忘得一干二净
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-7 11:27:12 | 显示全部楼层
老沫白 发表于 2022-7-7 11:23
不是的朋友打印%P你试试,然后我突然想起来了,之前学C的时侯我给忘了,他的这个ar指向的是MSG副本的第一 ...

哪来的副本的说法,define 就是替换   编译之前  把所有MSG 都老老实实的替换为 KKKKK
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-7 11:31:13 | 显示全部楼层
wp231957 发表于 2022-7-7 11:27
哪来的副本的说法,define 就是替换   编译之前  把所有MSG 都老老实实的替换为 KKKKK

额,他字符串是不是存储在静态存储区,但是啊,程序开始时是不是才会为数组分配内存,这个时候他才应该将字符串拷贝到数组里面啊,这不就成副本了吗?这个知识点不偏吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-7 11:31:44 | 显示全部楼层
wp231957 发表于 2022-7-7 11:26
开玩笑啊,我要%p  干啥

你试试,试试就知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-7 11:44:41 | 显示全部楼层
wp231957 发表于 2022-7-7 11:27
哪来的副本的说法,define 就是替换   编译之前  把所有MSG 都老老实实的替换为 KKKKK

其实吭,要是这个C语言真的按你这么说,那真的问题大了,众所周知指向String的指针要声明为const,就是因为改变String这个行为在C里面是未定义的嘛,可是数组不用声明为const,但你看数组其实是可以改变里面的元素的,如果没有副本那不还是未定义的行为么。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-7-7 11:45:18 | 显示全部楼层
wp231957 发表于 2022-7-7 11:27
哪来的副本的说法,define 就是替换   编译之前  把所有MSG 都老老实实的替换为 KKKKK

哥们,你怎么看,你看我说的对吧,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 08:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表