c - 这些数组声明有什么区别?

标签 c memset

#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/

相关文章:

c++ - 使用 C++ 将半字写入闪存时的 ARM Cortex-M HardFault 异常

c - 从 C 中的函数返回一个字符串

c++ - 为什么 std::fill(0) 比 std::fill(1) 慢?

c++ - 为什么我可以使用比分配的内存更多的内存?

c++ - CUDA 真的没有类似 calloc() 的 API 调用吗?

c - 执行 memset 函数时遇到问题?

c - GCC 编译时浮点优化

使用 malloc 创建指向指针的指针

你能假设类型转换指针是安全的吗?

optimization - 为什么 memset 很慢?