使用c中的函数更新字符串
Updating the string using function in c
我已经编写了以下 C 代码来更新字符数组 rb 但它正在打印垃圾值
#include <stdio.h>
void update(char* buff){
char word[] = "HII_O";
buff = word;
return;
}
int main(){
char rb[6];
update(rb);
rb[5] = '[=10=]';
printf("[%s]\n",rb);
return 0;
}
限制是我们不能使用任何其他库。那么如何解决这个
在函数update
中参数buff
是函数的局部变量,退出函数后不会存活
你可以想象函数调用方式如下
update( rb );
//...
void update( /*char* buff*/){
char *buff = rb;
char word[] = "HII_O";
buff = word;
return;
}
如您所见,原始数组没有改变。
即最初指针buff
被源数组rb
的第一个元素的地址初始化。
char *buff = rb;
然后这个指针被重新赋值给本地字符数组第一个元素的地址word
buff = word;
您需要使用标准字符串函数 strcpy
或 strncpy
.[=23= 将字符串文字 "HII_O"
的字符复制到源数组 rb
中]
例如
#include <string.h>
#include <stdio.h>
void update(char* buff){
strcpy( buff, "HII_O" );
}
int main(){
char rb[6];
update(rb);
printf("[%s]\n",rb);
return 0;
}
buff
是函数的 局部变量 。它被初始化为指向 main
中 rb
数组的第一个元素,但更改为 buff
将 不会更改 和 rb
大批。所以
buff = word;
使 buff
指向字符串文字 "HII_O"
但 rb
数组没有变化。
正常的解决方案是
void update(char* buff){
strcpy(buff, "HII_O");
}
但是,你写...
The restriction is we can't use any other library.
好吧,为了像您的代码那样设置固定值,您不需要任何库函数。
您不需要任何其他变量、字符串文字等。
只是简单的字符分配,例如:
void update(char* buff){
buff[0] = 'H';
buff[1] = 'I';
buff[2] = 'I';
buff[3] = '_';
buff[4] = 'O';
buff[5] = '[=12=]';
}
int main(){
char rb[6];
update(rb);
printf("[%s]\n",rb);
return 0;
}
由于不能使用任何库函数,只能逐格反拷贝,改
void update( /*char* buff*/){
char *buff = rb;
char word[] = "HII_O";
buff = word;
return;
}
(在 C 中不能将数组作为一个整体来赋值)
进入:
void update(char *buff) {
char *word = "HII_O";
int index;
/* copy characters, one by one, until character is '[=11=]' */
for (index = 0; word[index] != '[=11=]'; index = index + 1) {
buff[index] = word[index];
}
/* index ended pointing to the next character, so we can
* do the next assignment. */
buff[index] = '[=11=]'; /* ...and copy also the '[=11=]' */
}
我已经编写了以下 C 代码来更新字符数组 rb 但它正在打印垃圾值
#include <stdio.h>
void update(char* buff){
char word[] = "HII_O";
buff = word;
return;
}
int main(){
char rb[6];
update(rb);
rb[5] = '[=10=]';
printf("[%s]\n",rb);
return 0;
}
限制是我们不能使用任何其他库。那么如何解决这个
在函数update
中参数buff
是函数的局部变量,退出函数后不会存活
你可以想象函数调用方式如下
update( rb );
//...
void update( /*char* buff*/){
char *buff = rb;
char word[] = "HII_O";
buff = word;
return;
}
如您所见,原始数组没有改变。
即最初指针buff
被源数组rb
的第一个元素的地址初始化。
char *buff = rb;
然后这个指针被重新赋值给本地字符数组第一个元素的地址word
buff = word;
您需要使用标准字符串函数 strcpy
或 strncpy
.[=23= 将字符串文字 "HII_O"
的字符复制到源数组 rb
中]
例如
#include <string.h>
#include <stdio.h>
void update(char* buff){
strcpy( buff, "HII_O" );
}
int main(){
char rb[6];
update(rb);
printf("[%s]\n",rb);
return 0;
}
buff
是函数的 局部变量 。它被初始化为指向 main
中 rb
数组的第一个元素,但更改为 buff
将 不会更改 和 rb
大批。所以
buff = word;
使 buff
指向字符串文字 "HII_O"
但 rb
数组没有变化。
正常的解决方案是
void update(char* buff){
strcpy(buff, "HII_O");
}
但是,你写...
The restriction is we can't use any other library.
好吧,为了像您的代码那样设置固定值,您不需要任何库函数。
您不需要任何其他变量、字符串文字等。
只是简单的字符分配,例如:
void update(char* buff){
buff[0] = 'H';
buff[1] = 'I';
buff[2] = 'I';
buff[3] = '_';
buff[4] = 'O';
buff[5] = '[=12=]';
}
int main(){
char rb[6];
update(rb);
printf("[%s]\n",rb);
return 0;
}
由于不能使用任何库函数,只能逐格反拷贝,改
void update( /*char* buff*/){
char *buff = rb;
char word[] = "HII_O";
buff = word;
return;
}
(在 C 中不能将数组作为一个整体来赋值) 进入:
void update(char *buff) {
char *word = "HII_O";
int index;
/* copy characters, one by one, until character is '[=11=]' */
for (index = 0; word[index] != '[=11=]'; index = index + 1) {
buff[index] = word[index];
}
/* index ended pointing to the next character, so we can
* do the next assignment. */
buff[index] = '[=11=]'; /* ...and copy also the '[=11=]' */
}