如何更改指针字符串中的单个字符?
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;
}
我似乎无法在程序不崩溃的情况下更改指针中的单个字符。 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;
}