gpt4 book ai didi

Char* p 和 scanf

转载 作者:太空狗 更新时间:2023-10-29 17:15:58 24 4
gpt4 key购买 nike

我一直试图寻找以下代码失败的原因,但找不到。所以请原谅我的无知,让我知道这里发生了什么。

#include<stdio.h>
int main(void){
char* p="Hi, this is not going to work";
scanf("%s",p);
return 0;
}

据我所知,我创建了一个指针 p,指向内存中大小为 29 + 1(对于\0)的连续区域。为什么我不能使用 scanf 来更改它的内容?

P.S 如果我对 char* 说错了,请指正。

最佳答案

char* p="Hi, this is not going to work";

这不会分配内存给你写

这会创建一个 String Literal,每次您尝试更改其内容时都会导致Undefined Behaviour

使用 p 作为你的 scanf 的缓冲区做一些像char * p = malloc(sizeof(char) * 128);//128 是一个例子

你也可以这样做:

char p[]="Hi, this is not going to work";

我猜这是你真正想做的。

请记住,这最终仍可能是 UB,因为 scanf() 不会检查您正在使用的位置是否确实是有效的可写内存。

记住:

char * p 是字符串文字,不应修改

char p[] = "..." 分配足够的内存来保存 "..." 中的字符串并且可以更改(我的意思是它的内容).

编辑:

避免 UB 的一个好技巧是

char * p = malloc(sizeof(char) * 128);
scanf("%126s",s);

关于Char* p 和 scanf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4900394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com