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=]';
我创建了一个简单的程序,它接受两个命令行参数(一个字符和一个数字),并在屏幕上打印字符,但多次指定数字。
示例:
./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=]';