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

问题描述:

我想在C上做一些真正基本的事情,但是我一直在收到段错误。我想要做的就是用一个不同的字母替换一个字母的字母 - 在这个例子中,用l代替l。任何人都可以帮助解释我出错的地方吗?这应该是一个非常基本的问题,我想我不知道为什么它不起作用。替换字符串中的单个字符元素C

#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; 
} 

对于我的输出我得到

字符串1个招呼
字符串1 [2]升
分段故障

谢谢!

+0

String1是一个指向只读内存的指针(在大多数系统中),因为它是一个常量初始化程序。如果不先复制,则无法写入该字符串。 – gaige 2013-04-16 01:45:57

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); 
+0

好的,谢谢你!我会放弃这一点。 – user1163974 2012-02-05 12:51:48

+0

没什么大的,但你可以使用strdup(“hello”)而不是调用malloc和strcpy。 strdup为你做这个,使用起来更方便 – Zoneur 2012-02-05 13:32:27

+0

@Zoneur Yup,我经常推荐'strdup',但它有时会有问题,因为它不是标准的。 – cnicutar 2012-02-05 13:33:51

char *string1; 
string1 = "hello"; 

string1指向一个字符串字面量和字符串是不可修改的。

你可以做的是用字符串文字的元素初始化一个数组。

char string1[] = "hello"; 

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

string1[2] = 'L'; 

你正在试图改变一个字符串这是C. 不确定的行为而是使用string1[]="hello";你 分段故障是因为文字是可能存储在存储器的只读部分,并试图写入它会产生未定义的行为。

char *string1 = "hello"; 

运行代码时,字符串文字将位于只读区域。操作系统不允许代码改变这块内存,所以你会得到一个seg-fault。

char string1[] = "hello"; 

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