【问题标题】:Strange bug with C character copying program [closed]C字符复制程序的奇怪错误[关闭]
【发布时间】:2017-01-05 04:18:30
【问题描述】:

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

例子:

./fstring a 4

啊啊

它主要是有效的,但由于某种原因,对于特定的数字,最后会有奇怪的输入。

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

【问题讨论】:

  • %s 格式说明符需要一个以空字符结尾的字符串作为参数。这就是它知道何时停止写作的方式。

标签: c string c-strings


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 2021-10-24
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多