我无法在没有程序崩溃的情况下更改指针中的单个字符。 R1必须是指针。
char * R1[6];
int main (){
*R1 = "33333";
printf("%s\n", *R1);
R1[3] = '4';
printf("%s", *R1);
return 0;
}
答案 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;
}