如何复制 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];
}
}
在此代码中:
#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];
}
}