首页 > 解决方案 > 从数组打印字符串打印错误的结果

问题描述

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

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),要么只是一个空行。

标签: arrayscstringprinting

解决方案


表达式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);

推荐阅读