如何复制字符**a-C的值



在此代码中:

#include <stdio.h>
void givetome(char** skey);
int main(int argc, const char * argv[]) {
char *skey[5];
givetome(&skey[5]);
printf("%sn",*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),它应该可以工作。

BTW:当您将结果打印为字符串时,您需要使用'':终止字符串

#include <stdio.h>
void givetome(char* skey);
int main(int argc, const char * argv[]) {
char skey[6];
givetome(skey);
skey[5] = '';
printf("%sn",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("%sn", skey);
return 0;
}
void givetome(char *skey){
char f[6]={'g','h','f','d','s', ''};
for (int i=0; i<6; i++) {
skey[i]=f[i];
}
}

最新更新