【问题标题】:Printing the value of pointer to char in C在C中打印指向char的指针的值
【发布时间】:2018-12-20 09:35:14
【问题描述】:

我有这个代码:

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)。问题出在哪里?

【问题讨论】:

  • p 必须是 char** 类型
  • 什么是p + i
  • p = malloc(n * sizeof(char*));
  • 这段代码的用途尚不清楚。把它分解成函数,理解起来会容易得多。
  • @Basile Starynkevitch,他的所有程序都很危险。

标签: c arrays pointers char


【解决方案1】:

在这段代码中

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 时,如果使用“world”作为下一个名称,则将其放入p[1],因此p[0] 仍为“H”,即为您的'HWorld'

你需要一个 char **malloc 每个 char * 在循环内。 (以后别忘了free什么你malloc)

【讨论】:

    【解决方案2】:

    假设LEN 是最大字符串长度,您分配了一大块内存来放置字符串。

    然后你应该把ith 字符串放在strcpy((p + i*LEN), name);

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

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

    【讨论】:

      猜你喜欢
      • 2020-06-03
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      相关资源
      最近更新 更多