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

时间:2015-01-05 22:45:57

标签: c pointers char

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

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

3 个答案:

答案 0 :(得分:3)

这应该适合你:

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

}

答案 1 :(得分:1)

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

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

让我们分析您的错误代码以找出问题

第一个错误

char * R1[6];  

这里你要声明一个6指针数组,每个指针指向一个char,但是你想要一个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()

上一次{{1}}

的情况相同

答案 2 :(得分:1)

您声明的变量不是指针;它实际上是一个由六个char指针组成的数组(这就是printf失败的原因)。如果要使用char数组,只需写:

char R1[6];

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

char *R1;

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

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

确保零终止你的字符串:

R1[5] = '\0';

一旦你有了一个有效的,可变的* 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] = '\0';
   strcpy(R1, "33333");
   printf("%s\n", R1);
   R1[3] = '4';
   printf("%s", R1);
   free(R1);
   return 0;
}