如何更改指针字符串中的单个字符?

How do I change individual characters in a pointer string?

我似乎无法在程序不崩溃的情况下更改指针中的单个字符。 R1 必须是指针。

char * R1[6];       
int main (){
   *R1 = "33333";
   printf("%s\n", *R1);
   R1[3] = '4';
   printf("%s", *R1);
   return 0;
}

您的代码必须像这样才能正常工作

char  R1[6]="33333";       
int main (){
   printf("%s\n", R1);
   R1[3] = '4';
   printf("%s", R1);
   return 0;
}

让我们分析一下你的错误代码,找出问题所在

第一个错误

char * R1[6];  

这里你声明了一个包含 6 个指针的数组,每个指针指向一个字符,但你想要一个包含 6 个字符的数组,这就是为什么它应该 char R1[6]; 以获得你想要的

第二个错误

   *R1 = "33333";

在 C 语言中,您不能使用运算符 = 来分配字符串。您有两种选择,或者在声明时初始化 char R1[6] = "33333"; 或者您可以使用 函数 strcpy() 位于 string.h 库中,它将是 strcpy(R1,"33333");

第三个错误:

printf("%s\n", *R1);

printf() 中取消引用字符串时,您只需提供字符串的第一个元素的地址,即数组的名称 R1 这就是为什么它应该是这样的 指令

printf("%s\n", R1);

最后一样printf()

这应该适合你:

#include <stdio.h>

char  R1[6] = "33333";

int main () {

    printf("%s\n", R1);
    R1[3] = '4';
    printf("%s", R1);

    return 0;

}

输出:

33333
33343

编辑:

有了指针,这应该适合你:

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

int main () {

    char * R1 = malloc(6*sizeof(char));
    strcpy(R1, "33333");

    printf("%s\n", R1);
    R1[3] = '4';
    printf("%s", R1);

    free(R1);

    return 0;

}

您声明的变量不是指针;它实际上是一个包含六个字符指针的数组(这就是 printf 失败的原因)。如果你想使用一个字符数组,只需写:

char R1[6];

如果你想要一个字符指针,写:

char *R1;

并以某种方式初始化它(可能使用 malloc):

/*in main*/
R1 = malloc(6); /*six bytes for five chars +null terminator*/

确保以零终止字符串:

R1[5] = '[=13=]';

一旦你有了一个有效的、可变的* char 序列,你就可以像你已经这样做的那样分配给各个字符:

R1[3] = '4';

但是,在分配整个字符串时,您需要使用 strcpy 函数而不是 = 运算符:

/*R1 now contains the text "33333"*/
strcpy(R1, "33333");

*当您写 R1 = "33333" 时,您正在分配给 指针 而不是它指向的文本。由于 "33333" 是不可变的,因此当您的字符串直接引用它时,您将无法分配给字符串中的值。

所以完整的程序可能如下所示:

char *R1;       
int main (){
   R1 = malloc(6);
   R1[5] = '[=16=]';
   strcpy(R1, "33333");
   printf("%s\n", R1);
   R1[3] = '4';
   printf("%s", R1);
   free(R1);
   return 0;
}