Как скопировать значения для символа ** a - C - PullRequest
0 голосов
/ 15 ноября 2018

В этом коде:

#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".Кто-нибудь, чтобы помочь?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Здесь много проблем.

Вы определили skey как массив указателей. То, что вы хотите, это массив символов:

char skey[5];

Тогда при вызове функции:

givetome(&skey[5]);

Вы передаете адрес элемента массива с индексом 5. Самый большой индекс в массиве размера 5 равен 4, поэтому вы передаете указатель на единицу за концом массива. Вы хотите передать массив по имени, который передает адрес первого элемента.

givetome(skey);

Затем, поскольку мы переопределили skey, нам нужно изменить givetome, чтобы принять char *. Затем при назначении присваивайте skey[i], а не *skey[i].

У вас также будут проблемы с печатью, поскольку %s ожидает строку, которая определяется как массив символов с нулевым символом в конце. Массив не содержит нулевого байта, поэтому печать будет считываться за концом массива. Поэтому добавьте нулевой байт в конец 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', '\0'};
    for (int i=0; i<6; i++) {
        skey[i]=f[i];
    }
}
0 голосов
/ 15 ноября 2018

С givetome(&skey[5]) вы начинаете назначать символы в конце 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];
    }
}
...