使用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;

您需要使用标准字符串函数 strcpystrncpy.[=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 是函数的 局部变量 。它被初始化为指向 mainrb 数组的第一个元素,但更改为 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=]' */
}