C 字符复制程序的奇怪错误

Strange bug with C character copying program

我创建了一个简单的程序,它接受两个命令行参数(一个字符和一个数字),并在屏幕上打印字符,但多次指定数字。

示例:

./fstring a 4

aaaa

大部分情况下都有效,但出于某种原因,对于特定数字,末尾有奇怪的输入。

./fstring a 8

aaaaaaaa¼@

./fstring a 9

aaaaaaaaa@

./fstring a 10

aaaaaaaaaa@

同样的怪异模式发生在 40、41 和 42,以及 88、89 和 90 等。它似乎从 8 开始以 40 为增量发生。这是代码。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void create_string(char chr, int times);


int main(int argc, char *argv[])
{
    create_string(*argv[1], atoi(argv[2]));
    return 0;
}   

void create_string(char c, int t)
{
    char buf[t+1];

    int i;
    for(i = 0; i < t; ++i)
        buf[i] = c;

    printf("%s\n", buf);
}

我猜想和buf有关,但我想不通。

您忘记了字符串的终止零。写入

for(i = 0; i < t; ++i)
    buf[i] = c;
buf[i] = '[=10=]';