c - 使用 s 但 gettng 段错误,当我将 `s` 替换为 `s1

标签 c c-strings

#include <stdio.h>
#include <string.h>

main() {
    char s[6] = "HELLO";
    printf("s.len= %d,", (int)strlen(s));
    char* s1 = "HELLO";
    printf("s1.len= %d,", (int)strlen(s1));
    int i = 0;
    while (s[i] != '\0') {
        if (s[i] >= 65 && s[i] <= 90)
            s[i] = s[i] + 32;
        ++i;
    }
    printf("Now s =%s\n", s);
}

使用 s 但出现段错误,当我将 s 替换为 s1 时,尽管两者具有相同的长度和相同的词(“HELLO”)。

请帮助我,指出我的错误,提前谢谢。

最佳答案

char s[6] = "HELLO"; 定义了一个包含六个字符的字符数组,最初初始化为五个字符 H、E、L、L、O 和一个空终止符。

char *s1 = "HELLO"; 定义一个指向常量字符串文字的指针。

修改字符数组是可以的,因为数组只用常量初始化。

修改字符串文字是不可行的,因为它是一个常量,而这正是您尝试通过编写 s1[0] = 'k' 来完成的。

关于c - 使用 s 但 gettng 段错误,当我将 `s` 替换为 `s1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25854630/

相关文章:

c++ - 检测特定像素上的某种颜色并在检测到后发送点击的最快方法是什么?

指针和 const char[] 的 C 错误

c - 如何将输入的单词与单词列表进行比较?

c++ - 在c++中添加两个c字符串

c - 字符串中的 `% a` 读取为内存中的一个点

c - 为什么在写入使用字符串文字初始化的 "char *s"而不是 "char s[]"时出现段错误?

c - 那么 exit() 是如何工作的呢?

c - 如何从 c 中的字符串中删除前 n 个字符?

arrays - 如何在 C 中打印出未知大小的字符串数组?

c++ - Visual Studio 2015 : Compile C/C++ without a runtime library