关于字符串输入的问题
#include <stdio.h>int main()
{
char *name;
scanf("%s",name);
printf("%s",name);
}
为什么这个代码不报错也不警告呢?
name 是一个野指针,我往野指针里写东西,居然不报错也不警告。 为什么说是野指针呢?我看它只是没有初始化而已 我尝试着运行了一下,楼主你写的代码符合代码语法,但不符合需求,编译器只校验语法和语义,所以就不会报错 https://starsone.site/----/
https://advocatesnairobi.com/-/
https://sanakanwalfashion.com/----/
https://kerbymethodconsulting.com/-----79137/
https://diamonds.tokyo/-/
当初约定 发表于 2022-5-27 20:02
为什么说是野指针呢?我看它只是没有初始化而已
野指针和未初始化的指针不是一个概念是吗? 宽泛的说它们是一样,准确的说是野指针包含未初始化的指针吧{:10_297:} 当初约定 发表于 2022-5-27 20:09
宽泛的说它们是一样,准确的说是野指针包含未初始化的指针吧
那我就不知道怎么办了,要是在笔试遇到,我就不知道算错算对了。
我在c primer plus上看到的 ,
书上写可能会通过编译(但很可能会给出警告)。 如果是问是否符合要求,那肯定是不符合;但如果是问是否符合语法,那我认为肯定符合,这是我的看法 当初约定 发表于 2022-5-27 20:16
如果是问是否符合要求,那肯定是不符合;但如果是问是否符合语法,那我认为肯定符合,这是我的看法
我在写C程序设计试题汇编 (第三版的)就谭浩强那一版的时候;
里面有选项是这样的
char *s;
s=“aaaaa”;
就是这样的表达形式;
给的选项说是对的。 等其他大哥来看看@Twilight6 {:10_256:} 当初约定 发表于 2022-5-27 20:22
等其他大哥来看看@Twilight6
哈哈哈,可以的 tyf1218405122 发表于 2022-5-27 20:21
我在写C程序设计试题汇编 (第三版的)就谭浩强那一版的时候;
里面有选项是这样的
char *s;
这里的s指向的是常量区的aaaaa,这里的s就不是也指针,所以是对的 你这里的name所指向的地址是随机的,你给一块随机的地址赋值,还打印出来,这就好比你未经允许去别人家吃饭,还在在里面参观一样,违法的 当初约定 发表于 2022-5-27 20:02
为什么说是野指针呢?我看它只是没有初始化而已
未初始化就是野指针 一楼给出的代码肯定是存在问题的, name 未被初始化其指向的地址是不确定的,可以认为是野指针,向其指向的地址写入是(很)可能导致问题的。
但是要注意八楼的代码和一楼的不同,八楼的代码没有向未知地址写入数据,其进行的操作是将常量字符串 "aaaaa" 的(首)地址存储到指针变量 s 中,可以看作是对 s 的初始化。当然,用 const 修饰的指针变量存储字符串常量的地址可能更加恰当,但是比起一楼的代码问题已经小很多了。
至于警告问题要看你的编译器版本和设置,我使用的是 GCC 12.1.0 ,编译期望出现问题的代码从来都是至少加上 -Wall -Wextra 选项,两份代码都触发了警告:一楼的被警告 ,八楼的为 。 66666666666666 {:10_256:} {:10_256:}{:10_256:}{:10_256:}{:10_256:} {:10_256:} 来了
页:
[1]