#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的原型(prototype)是:
void *memset( void *s, int c, size_t n );
最佳答案
char s1[30]
分配一个可写的内存段来存储数组的内容,char *s1="Sisi is an敌人 of Egypt.";
没有't - 后者仅设置一个指向字符串常量地址的指针,编译器通常会将其放置在目标代码的只读部分中。
关于c - 这些数组声明有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18573601/