替换字符串C的单个字符元素

时间:2012-02-05 12:43:55

标签: c string replace character

我正在尝试在C上做一些非常基本的事情,但我不断遇到分段错误。我想做的就是用一个不同的字母替换一个单词的字母 - 在这个例子中用l代替l。任何人都可以帮助解释我哪里出错了吗?它应该是一个非常基本的问题我想,我只是不知道它为什么不起作用。

#include<stdio.h>
#include<stdlib.h>

int main(int argc, char *argv[])
{
    char *string1;

    string1 = "hello";
    printf("string1 %s\n", string1);    

    printf("string1[2] %c\n", string1[2]);
    string1[2] = 'L';
    printf("string1 %s\n", string1);

    return 0;
}

对于我的输出我得

  

string1你好   string1 [2] l
  分段错误

谢谢!

4 个答案:

答案 0 :(得分:15)

string1 = "hello";
string1[2] = 'L';

can't change string literals,这是未定义的行为。试试这个:

char string1[] = "hello";

或者也许:

char *string1;
string1 = malloc(6); /* hello + 0-terminator */
strcpy(string1, "hello");

/* Stuff. */

free(string1);

答案 1 :(得分:3)

char *string1;
string1 = "hello";

string1指向字符串文字,字符串文字是不可修改的。

您可以做的是使用字符串文字的元素初始化数组。

char string1[] =  "hello";

string1数组的元素是可修改的。

答案 2 :(得分:1)

char *string1 = "hello";

运行代码时,字符串文字将位于只读部分。操作系统不允许代码更改该内存块,因此会出现seg-fault。

char string1[] = "hello";

运行代码时,字符串文字将被压入堆栈。

答案 3 :(得分:0)

 string1[2] = 'L';

您正在尝试更改C中未定义行为的字符串文字。 而是使用string1[]="hello"; 你得到的分段错误是因为文字可能存储在内存的只读部分,并且试图写入它会产生不确定的行为。