替换字符串中的单个字符元素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]升
分段故障
谢谢!
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);
好的,谢谢你!我会放弃这一点。 – user1163974 2012-02-05 12:51:48
没什么大的,但你可以使用strdup(“hello”)而不是调用malloc和strcpy。 strdup为你做这个,使用起来更方便 – Zoneur 2012-02-05 13:32:27
@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";
当您运行代码时,字符串文字将被压入堆栈。
String1是一个指向只读内存的指针(在大多数系统中),因为它是一个常量初始化程序。如果不先复制,则无法写入该字符串。 – gaige 2013-04-16 01:45:57