为啥 memset() 的这种用法会出现段错误?
Posted
技术标签:
【中文标题】为啥 memset() 的这种用法会出现段错误?【英文标题】:Why is this usage of memset() segfaulting?为什么 memset() 的这种用法会出现段错误? 【发布时间】:2013-12-02 22:49:40 【问题描述】:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
char *str = "This is a string!";
int therealthing = sizeof(str[0]) * 4;
memset(str, 'b', therealthing);
printf("%s\n", str);
return 0;
此代码导致段错误,有什么想法吗? 我已经尝试将它作为内存地址和指针传递。
【问题讨论】:
【参考方案1】:这是一个字符串文字。它是不可变的。无法更改。
char *str = "This is a string!";
您正在尝试使用 memset 更改它。你可以使用一个字符数组
char str[] = "This is a string!";
或
char * str = malloc(sizeof(char) * (strlen("This is a string!") + 1));
strcpy(str, "This is a string!");
【讨论】:
【参考方案2】:您不能修改字符串文字。它将调用未定义的行为。 试试这个吧
char str[] = "This is a string!";
【讨论】:
+ 他应该得到警告以上是关于为啥 memset() 的这种用法会出现段错误?的主要内容,如果未能解决你的问题,请参考以下文章
汽车加油问题出现一些错误。它适用于大多数测试用例,但不适用于所有测试用例。你能告诉我为啥这段代码是错误的
为啥这段代码在 64 位架构上会出现段错误,但在 32 位上却能正常工作?