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

时间:2017-01-05 04:18:30

标签: c string c-strings

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

示例:

  

./ 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有关,但我无法弄明白。

1 个答案:

答案 0 :(得分:4)

你忘记了字符串的终止零点。写

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