传递指针和复制值

时间:2016-07-31 11:28:21

标签: c

我想我在这里做了些蠢事,请帮我理解它是什么,我得到了一个崩溃:

lxml

3 个答案:

答案 0 :(得分:1)

习惯上将字符串文字设为只读。那就是:

char *data="xyz";

当您的代码尝试更改字节xyz时,操作系统会将其崩溃。

要使其可写,请用数组替换指针;你还应该指定数组的大小。最简单的方法是:

char data[] = "xyz"; // will hold a maximum of 3 bytes (size is implicit)

char data[20]; // will hold a maximum of 19 bytes plus an end-of-string byte

您还可以使用strdup

char* data;
...
strdup(cmd, EEPROM[index]); // instead of strcpy

但这涉及动态内存分配,我认为你不想打扰。

答案 1 :(得分:0)

strcpy进入静态记忆空间,

char *data="xyz";

也就是说,您创建了一个在编译时存储在保留内存位置的字符串xyz。您无法写入该内存位置。您想分配新空间,例如 malloc

答案 2 :(得分:0)

char data[] = "xyz"定义了一个指向“xyz”的char指针,该指针位于只读区域,因此您无法写入此位置。你还坚持到底有什么意义?

将其更改为getcmdAtIndex可确保将此文字复制到堆栈 - 因此可以修改。

此外,☿[~]$ alias hdd='echo Σ= $(($(df -BMB /dev/sdb1 --output=used | tail -1 | grep -o '[0-9]*')+$(df -BMB /dev/sdc1 --output=used | tail -1 | grep -o '[0-9]*'))) Mb' 功能不安全。超出指数位置怎么办?