使用printf()添加不需要的空格/行的格式化输出 - C编程

时间:2015-04-07 09:05:27

标签: c string formatting printf string-formatting

这是我遇到问题的功能。主要是最后的printf语句。我对C比较陌生,但我觉得这是一个不寻常的结果。非常感激任何的帮助!

void frequencies(char htmlDoc[]) {
    tags(htmlDoc, 0);
    int ndx;
    //  struct tagCounter *pCursor = tagCounters[0];
    int size = 1;
    char *name;
    for (ndx = 0; ndx < tagCntSize; ndx++) {
        name = &(tagCounters[ndx]->tagName[0]);
        while (*(name + 1) != '\0') {
            size++;
            name++;
        }
    name = &(tagCounters[ndx]->tagName[0]);
    char thisName[size];
    int index;
    int thisCount = tagCounters[ndx]->tagCount;
    for (index = 0; index < size; index++) {
        thisName[index] = *name;
        name++;
    }
    printf("%s\t%i\n", thisName, thisCount);
    }
}

这是结果输出:

img
�   1
img
    1
img
    1
img
    1
img
    1
img
    1
Ready

2 个答案:

答案 0 :(得分:0)

char thisName[size];

此后

memset(thisName,0,sizeof(thisName));

%s期望一个以空字符结尾的字符串。或退出循环后

thisName[size] = '\0';

编辑:

数组大小应足够大,以容纳字符串的空终止。

char thisName[size + 1];

答案 1 :(得分:0)

char * name,* ptr;

ptr = name =&amp;(tagCounters [ndx] - &gt; tagName [0]);

while(* ptr!='\ 0')     PTR ++;

size = ptr - name;

在printf之前:

thisName [size] ='\ 0';