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

如何复制字符**a-C的值,c,arrays,copy,c-strings,C,Arrays,Copy,C Strings,在此代码中: #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',

在此代码中:

#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];
    }
}
#包括
无效赠予书(字符**skey);
int main(int argc,const char*argv[]{
char*skey[5];
givetome(&skey[5]);
printf(“%s\n”,*skey);
返回0;
}
作废赠书(字符**skey){
字符f[5]={'g','h','f','d','s'};
对于使用
givetome(&skey[5])
的(int i=0;i),您开始在
skey
的末尾分配字符,从而超出数组边界。使用
givetome(&skey[0])
或简单地使用
givetome(skey)
应该可以工作

顺便说一句:当您将结果打印为字符串时,您需要使用
'\0'
终止该字符串:

#include <stdio.h>
void givetome(char* skey);
int main(int argc, const char * argv[]) {
    char skey[6];
    givetome(skey);
    skey[5] = '\0';
    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];
    }
}
#包括
作废赠予书(char*skey);
int main(int argc,const char*argv[]{
char-skey[6];
吉维多姆(斯凯);
skey[5]='\0';
printf(“%s\n”,skey);
返回0;
}
void givetome(char*skey){
字符f[5]={'g','h','f','d','s'};
对于使用
givetome(&skey[5])
的(int i=0;i),您开始在
skey
的末尾分配字符,从而超出数组边界。使用
givetome(&skey[0])
或简单地使用
givetome(skey)
应该可以工作

顺便说一句:当您将结果打印为字符串时,您需要使用
'\0'
终止该字符串:

#include <stdio.h>
void givetome(char* skey);
int main(int argc, const char * argv[]) {
    char skey[6];
    givetome(skey);
    skey[5] = '\0';
    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];
    }
}
#包括
作废赠予书(char*skey);
int main(int argc,const char*argv[]{
char-skey[6];
吉维多姆(斯凯);
skey[5]='\0';
printf(“%s\n”,skey);
返回0;
}
void givetome(char*skey){
字符f[5]={'g','h','f','d','s'};
对于(inti=0;i这里有很多问题

您将
skey
定义为指针数组。您需要的是字符数组:

char skey[5];
然后,当您调用该函数时:

givetome(&skey[5]);
您通过索引5传递数组元素的地址。大小为5的数组中最大的索引是4,因此您要传递一个指向数组末尾的指针。您希望通过名称传递数组,该名称传递第一个元素的地址

givetome(skey);
然后,由于我们重新定义了
skey
,我们需要更改
givetome
以接受
char*
。然后在分配时,分配给
skey[i]
,而不是
*skey[i]

打印时也会遇到问题,因为
%s
需要一个字符串,该字符串被定义为以null结尾的字符数组。该数组不包含null字节,因此打印时读取的内容将超过数组的结尾。因此,在
f
的结尾添加一个null字节,并在
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', '\0'};
    for (int i=0; i<6; i++) {
        skey[i]=f[i];
    }
}
#包括
作废赠予书(char*skey);
int main(int argc,const char*argv[]{
char-skey[6];
吉维多姆(斯凯);
printf(“%s\n”,skey);
返回0;
}
void givetome(char*skey){
字符f[6]={'g','h','f','d','s','0'};
对于(inti=0;i这里有很多问题

您将
skey
定义为指针数组。您需要的是字符数组:

char skey[5];
然后,当您调用该函数时:

givetome(&skey[5]);
您通过索引5传递数组元素的地址。大小为5的数组中最大的索引是4,因此您要传递一个指向数组末尾的指针。您希望通过名称传递数组,该名称传递第一个元素的地址

givetome(skey);
然后,由于我们重新定义了
skey
,我们需要更改
givetome
以接受
char*
。然后在分配时,分配给
skey[i]
,而不是
*skey[i]

打印时也会遇到问题,因为
%s
需要一个字符串,该字符串被定义为以null结尾的字符数组。该数组不包含null字节,因此打印时读取的内容将超过数组的结尾。因此,在
f
的结尾添加一个null字节,并在
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', '\0'};
    for (int i=0; i<6; i++) {
        skey[i]=f[i];
    }
}
#包括
作废赠予书(char*skey);
int main(int argc,const char*argv[]{
char-skey[6];
吉维多姆(斯凯);
printf(“%s\n”,skey);
返回0;
}
void givetome(char*skey){
字符f[6]={'g','h','f','d','s','0'};

对于(int i=0;我尝试使用“givetome(&skey[0])”和“givetome(skey)”,但不适用于添加的完整程序。其中,你说skey[5]='\0'是6。它tanks@user48571“\0”被称为空终止符。printf和所有字符串函数都要求传递给它们的所有char*”都以“\0”结尾。我尝试使用“givetome(&skey[0])”和“givetome(skey)”但是不要使用添加的完整程序。如果你说skey[5]='\0'是6,那么tanks@user48571“\0”被称为空终止符。printf和所有字符串函数都需要传递给它们的所有char*”以“\0”结尾。我需要将更改保存在主函数向量中。因此我需要“char**skey”@user48571不可以。当您将
skey
传递给函数时,实际上是在传递指向第一个元素的指针。因为:
skey[i]
与:
*(skey+i)相同
,您正在解引用该指针并写入解引用位置,这意味着
givetome
中的数组更新在
main
中可见。user48571如果您的函数采用非常量指针,结果将在main中可见。char**是锯齿数组。char*是数组。向量可以调整自身大小,即。std::vector。使用dbush的示例。@dbush您的正向偏差错误,应为char*@Johnathan谢谢。已修复。我需要将更改保存在主函数向量中。因此我需要“char**skey”@user48571不可以。当您将
skey
传递给函数时,实际上是在传递指向第一个元素的指针。因为:
skey[i]
与:
*(skey+i)相同
,您正在解引用该指针并写入解引用位置,这意味着
givetome
中的数组更新在
main
中可见。user48571如果您的函数采用非常量指针,则结果将在main中可见。char**是锯齿数组。char*是数组。vecto