【问题标题】:Printing string from array prints wrong result从数组打印字符串打印错误的结果
【发布时间】:2020-12-06 00:35:34
【问题描述】:

嘿,我想知道是否可以得到一些帮助。我有一个这样给我的数组:

char **indexArray;

我被告知要像这样添加到数组中:

indexArray[recCount++]=root->data;

recCount 并不重要,但本质上,当我这样做时,我尝试了这个:

printf(indexArray[recCount]);
printf(root->data); 

但由于某种原因,输出是这样的:

ðy
test

有人知道为什么吗?

编辑:@MikeCAT 我的节点设置如下:

    numNodes += 1;

    struct bNode *node = (bNode *) malloc(sizeof(bNode));
    node->data = data;
    node->left  = NULL;
    node->right = NULL;
    printf(node->data); #prints the data I want so this works just fine
    return node;
}

然后我按照以下方式做一些事情:

bNode root = makeNode("test")

然后我这样做:

indexArray[recCount++]=root->data;

当我这样做时:

printf("%s", indexArray[0]);

我要么得到一些随机字符,(null),要么只是一个空行。

【问题讨论】:

    标签: arrays c string printing


    【解决方案1】:

    表达式recCount++ 是在recCount 上加一并计算为recCount 的值在加法之前。

    因此,之后您应该使用indexArray[recCount-1] 而不是indexArray[recCount] 来获取分配的值。

    还有

    printf(indexArray[recCount]);
    printf(root->data); 
    

    看起来很危险,因为它将数据中的% 解释为格式说明符并调用未定义的行为,因为如果包含说明符,则没有对应于说明符的数据。

    应该是

    printf("%s", indexArray[recCount]);
    printf("%s", root->data);
    

    或

    fputs(indexArray[recCount], stdout);
    fputs(root->data, stdout);
    

    【讨论】:

    • 我的节点设置如下:struct bNode *makeNode(char *data) { numNodes += 1; struct bNode *node = (bNode *) malloc(sizeof(bNode)); node->data = data; node->left = NULL; node->right = NULL; printf(node->data); #prints the data I want so this works just fine return node; } 然后我执行以下操作:bNode root = makeNode("test") 然后我执行此操作:indexArray[recCount++]=root->data; 但是当我执行此操作时:printf("%s", indexArray[0]); 我要么得到一些随机字符,(null),或者只是一个空行。
    • 您有什么解决办法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多