Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换字符串C的单个字符元素_C_String_Replace_Character - Fatal编程技术网

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

替换字符串C的单个字符元素,c,string,replace,character,C,String,Replace,Character,我试图在C语言上做一些非常基本的事情,但是我一直遇到一个分割错误。我想做的就是用一个不同的字母替换一个单词中的一个字母——在这个例子中,用一个l替换l。有人能帮我解释一下我哪里出错了吗?这应该是一个非常基本的问题,我想,我只是不知道为什么它不工作 #include<stdio.h> #include<stdlib.h> int main(int argc, char *argv[]) { char *string1; string1 = "hello"

我试图在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;
}
#包括
#包括
int main(int argc,char*argv[])
{
字符*string1;
string1=“你好”;
printf(“string1%s\n”,string1);
printf(“string1[2]%c\n”,string1[2]);
string1[2]=“L”;
printf(“string1%s\n”,string1);
返回0;
}
对于我的输出,我得到

string1你好
string1[2]l
分段故障

谢谢

你,这是未定义的行为。试试这个:

char string1[] = "hello";
或者可能:

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

/* Stuff. */

free(string1);
string1
指向字符串文字,且字符串文字不可修改

 string1[2] = 'L';
您可以做的是使用字符串文字的元素初始化数组

char string1[] =  "hello";
string1
数组的元素是可修改的

 string1[2] = 'L';
您正在尝试更改一个字符串文字,该文字在C中是未定义的行为。 而是使用
string1[]=“hello”
您得到的分段错误是因为文字可能存储在内存的只读部分中,试图写入文字会产生未定义的行为

char *string1 = "hello";
运行代码时,字符串文本将位于只读的部分中。操作系统不允许代码更改该内存块,因此会出现seg故障

char string1[] = "hello";

当您运行代码时,字符串文本将被推送到堆栈上。

Ok-谢谢!我来试试。没什么大不了的,但是你可以用strdup(“你好”)来代替打电话给malloc和strcpy。strdup为您做这件事,更方便use@Zoneur是的,我经常推荐
strdup
,但有时会有问题,因为它不是标准的。@cnicutar我不知道,谢谢:)如果我想更改此值?“你好”到“helxo”你的代码不工作。。。。更改特定值(在指针中)…替换字符串的单个字符元素CString1是指向只读内存的指针(在大多数系统中),因为它是常量初始值设定项。如果不先复制该字符串,则无法写入该字符串。
char string1[] = "hello";