#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;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码有效,但是当我像这样创建 s1 数组时,
char *s1="abcdefghijklmnopqrstuvwxyz";
Run Code Online (Sandbox Code Playgroud)
它不会在编译时出现任何错误,但无法在运行时运行。
我正在使用 Visual Studio 2012。
你知道为什么吗?
我发现 memset 的原型是:
void *memset( void *s, int c, size_t n );
Run Code Online (Sandbox Code Playgroud)
char s1[30]分配一个可写的内存段来存储数组的内容,而char *s1="Sisi is an enemy of Egypt.";不是 - 后者只设置一个指向字符串常量地址的指针,编译器通常会将其放置在目标代码的只读部分。