加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中的char指针初始化

发布时间:2020-12-16 10:43:30 所属栏目:百科 来源:网络整理
导读:关于字符指针以及它们是如何工作的我不太清楚. 程序构建,但在运行时崩溃. char *ab = NULL; //ab = "abc123"; // works fine sprintf(ab,"abc%d",123); // this line seems to crash the program 当sprintf接受(char * str)作为第一个参数时,我不明白这是怎
关于字符指针以及它们是如何工作的我不太清楚.

程序构建,但在运行时崩溃.

char *ab = NULL;
 //ab = "abc123"; // works fine
 sprintf(ab,"abc%d",123); // this line seems to crash the program

当sprintf接受(char * str)作为第一个参数时,我不明白这是怎么回事.

有人可以向我解释一下吗?

解决方法

你没有分配任何内存用于ab.

第一个赋值是有效的,因为你要赋予ab一个字符串常量:“abc123”.编译器代表您提供常量字符串的内存:您不需要分配此内存.

在你用ab之前sprintf,你需要使用malloc分配一些内存,并将该空间分配给ab:

ab = malloc(sizeof(char) * (NUM_CHARS + 1));

那么只要你使用malloc创造了足够的空间,你的sprintf就会工作.注意:1代表null terminator.

或者,您可以通过将其声明为数组来为ab创建一些内存:

char ab[NUM_CHARS + 1];

如果不以某种方式为ab分配内存,sprintf调用将尝试写入NULL,这是未定义的行为;这是你崩溃的原因.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读