【发布时间】:2013-09-02 21:32:35
【问题描述】:
#include <stdio.h>
#include <string.h>
int main(void){
char s1[30]="abcdefghijklmnopqrstuvwxyz";
printf("%s\n",s1);
printf("%s",memset(s1,'b',7));
getch();
return 0;
}
上面的代码有效,但是当我像这样创建 s1 数组时,
char *s1="abcdefghijklmnopqrstuvwxyz";
它在编译时没有给出任何错误,但在运行时运行失败。
我正在使用 Visual Studio 2012。
你知道为什么吗?
我发现memset的原型是:
void *memset( void *s, int c, size_t n );
【问题讨论】:
-
失败??错误是什么?没有打印输出吗?垃圾打印?
-
C_Son38.exe 中 0x0F251CF5 (msvcr110d.dll) 处未处理的异常:0xC0000005:访问冲突写入位置 0x00D15858。 (中断、继续、忽略按钮)
-
您正在写入内存的只读段。正如答案中已经解释的那样