Печать значения указателя на символ в C - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть этот код:

main() {

    printf("enter the number of names: ");
    int n;
    scanf("%d", &n);
    getchar();

    char *p;
    p = malloc(n*LEN*sizeof(char));

    char *name = malloc(LEN*sizeof(char));

    int i;
    for(i = 0; i < n; i++) {
        gets(name);
        strcpy((p + i), name);
        printf("%s \n", (p + i));
        strncpy(name, "", LEN);
    }

    for(i = 0; i < n; i++) 
        printf("%s\n", (p + i));

}

и у меня проблемы с печатью значений указателя p , что правильно в первом цикле, но вво втором контуре вывод неправильный (LEN определен как 15).Где проблема?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Предполагая, что LEN - максимальная длина строки, вы выделили большой кусок памяти, в который вы хотите поместить строки.

Затем i -ую строку вы должны поместить в strcpy((p + i*LEN), name);

Вам также следует позаботиться о том, чтобы строка не была слишком длинной и заканчивалась, поэтому лучше использовать

    strncpy((p + i*LEN), name, LEN-1);
    *(p+i*LEN-1)= '\0';
0 голосов
/ 20 декабря 2018

В этом коде

char *p;
p = malloc(n*LEN*sizeof(char));

char *name = malloc(LEN*sizeof(char));

int i;
for(i = 0; i < n; i++) {
    gets(name);
    strcpy((p + i), name);
    printf("%s \n", (p + i));
    strncpy(name, "", LEN);
}

у вас есть один массив char, и вы помещаете строку в начало, когда i равно 0, например, «Hello».Когда i равно 1, если вы используете «мир» в качестве следующего имени, оно помещается в p[1], поэтому p[0] по-прежнему «H», что дает вам 'HWorld'.

. Вам нужноchar ** и malloc каждый char * внутри цикла.(Не забывайте free, что вы используете malloc позже)

...