如何复制 char **a - C 的值

How to copy values for the char **a - C

在此代码中:

#include <stdio.h>
void givetome(char** skey);
int main(int argc, const char * argv[]) {
    char *skey[5];
    givetome(&skey[5]);
    printf("%s\n",*skey);
    return 0;
}
void givetome(char **skey){
    char f[5]={'g','h','f','d','s'};
    for (int i=0; i<5; i++) {
        *skey[i]=f[i];
    }
}

我无法将值从向量 "f" 复制到向量 "skey"。有人帮忙吗?

使用 givetome(&skey[5]),您开始在 skey 末尾分配字符,从而超出数组边界。使用 givetome(&skey[0]) 或简单地 givetome(skey) 它应该可以工作。

顺便说一句:当您将结果打印为字符串时,您需要使用 '[=15=]':

终止字符串
#include <stdio.h>
void givetome(char* skey);
int main(int argc, const char * argv[]) {
    char skey[6];
    givetome(skey);
    skey[5] = '[=10=]';
    printf("%s\n",skey);
    return 0;
}
void givetome(char *skey){
    char f[5]={'g','h','f','d','s'};
    for (int i=0; i<5; i++) {
        skey[i]=f[i];
    }
}

这里有很多问题。

您将 skey 定义为指针数组。你想要的是一个字符数组:

char skey[5];

然后调用函数时:

givetome(&skey[5]);

您传递了索引为 5 的数组元素的地址。大小为 5 的数组中的最大索引为 4,因此您传递的是指向数组末尾的指针。你想按名称传递数组,它传入第一个元素的地址。

givetome(skey);

然后,由于我们重新定义了 skey,我们需要更改 givetome 以接受 char *。然后赋值的时候赋给skey[i],而不是*skey[i].

您还会遇到打印问题,因为 %s 需要一个字符串,该字符串被定义为以 null 结尾的字符数组。该数组不包含空字节,因此打印将读取数组末尾之后的内容。所以在 f 的末尾添加一个空字节,并在 skey.

中为其节省空间

经过所有更改后,代码应如下所示。

#include <stdio.h>

void givetome(char *skey);

int main(int argc, const char * argv[]) {
    char skey[6];
    givetome(skey);
    printf("%s\n", skey);
    return 0;
}

void givetome(char *skey){
    char f[6]={'g','h','f','d','s', '[=13=]'};
    for (int i=0; i<6; i++) {
        skey[i]=f[i];
    }
}