我想我在这里做了些蠢事,请帮我理解它是什么,我得到了一个崩溃:
lxml
答案 0 :(得分:1)
习惯上将字符串文字设为只读。那就是:
char *data="xyz";
当您的代码尝试更改字节x
,y
和z
时,操作系统会将其崩溃。
要使其可写,请用数组替换指针;你还应该指定数组的大小。最简单的方法是:
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'
功能不安全。超出指数位置怎么办?