Как я могу создать указатель для массива строк? - PullRequest
0 голосов
/ 16 апреля 2019

Я новичок в C и не уверен, как правильно передавать указатели / адреса, когда дело доходит до символов / строк. Я не могу разобраться в этих «строках», о том, как справиться с указателями.

Я в основном хочу передать адрес массива "a", определенный ниже, в произвольную функцию, но я не знаю, как определить указатель для этого массива.

Пожалуйста, помогите мне!

У меня есть следующий код:

void change(char** a){
    a[0][0]='k';    //that should change a inside main
}

void main() {
    char a[2][3];
    char *tempWord;
    tempWord="sa";
    a[0]=tempWord;
    a[1]=tempWord;
    change(&a);
}

1 Ответ

0 голосов
/ 16 апреля 2019

У вас есть char[2][3], чтобы вы могли передать char (*)[2][3] в вашу change функцию.Чтобы скопировать tempWord в ваш char[][], вы можете использовать strncpy.Предполагая, что я понимаю, что вы пытаетесь сделать, это может выглядеть как

#include <stdio.h>
#include <string.h>

void change(char (*a)[2][3]) {
    *a[0][0] = 'k';
}

int main() {
    char a[2][3];
    char *tempWord = "sa";
    strncpy(a[0], tempWord, strlen(tempWord));
    strncpy(a[1], tempWord, strlen(tempWord));
    change(&a);
}

Есть ли другое определение указателя, кроме char(*a)[2][3]?

Iдумаю, вы действительно хотели char **;для этого вам понадобится malloc и free вашей памяти.Что-то вроде

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void change(char **a) {
    a[0][0]='k';
}

int main() {
    char **a;
    char *tempWord = "sa";
    a = malloc(2 * sizeof(char **));
    a[0] = malloc(strlen(tempWord) * sizeof(char *));
    a[1] = malloc(strlen(tempWord) * sizeof(char *));
    strncpy(a[0], tempWord, strlen(tempWord));
    strncpy(a[1], tempWord, strlen(tempWord));
    change(a);
    printf("%s\n", a[0]);
    free(a[1]);
    free(a[0]);
    free(a);
}
...