在C中打印指向char的指针的值

时间:2018-12-20 09:35:14

标签: c arrays pointers char

我有此代码:

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 :(得分:2)

在此代码中

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时(例如, “你好”。 当i为1时,如果您将“世界”用作下一个名称,则将其放在p[1]中,因此p[0]仍为'H',为您提供'HWorld'。 / p>

在循环中,每个char **都需要一个mallocchar *。 (不要忘了以后free分配您的内容)

答案 1 :(得分:1)

假设LEN是最大字符串长度,那么您分配了一大块要放入字符串的内存。

然后将第i个字符串放在strcpy((p + i*LEN), name);

您还应该注意字符串不要太长并且被终止,所以更好地使用

    strncpy((p + i*LEN), name, LEN-1);
    *(p+i*LEN-1)= '\0';