【问题标题】:c printing too many charsc 打印太多字符
【发布时间】:2013-12-11 06:26:36
【问题描述】:

我正在尝试像在小端机器中一样向后打印内存地址,但由于某种原因,我的程序在我的程序中输出了两个 char 数组。

char address[8];
char result[16];
scanf("%s", address);
int x = 1;
for(x; x<5; x++)
{
int y = 4*x;
int z = 8 - 2*x;
result[y-4] = '\\';
result[y-3] = 'x';
result[y-2] = address[z];
result[y-1] = address[z+1];
}
printf("%s", result);

例如,如果我输入“12345678”,它会输出"\x78\x56\x34\x1212345678" 我想要"\x78\x56\x34\x12",但我不明白为什么还要打印"12345678"

【问题讨论】:

  • '\0' 在哪里?
  • 我建议您阅读更多关于 C 中的字符串及其工作原理的信息。

标签: c arrays char printf


【解决方案1】:

您忘记终止字符串。事实上,你的数组对于终结符来说太小了,你需要它是 17 个字符,然后result[16] = '\0';


哦,您的代码中还有一个越界错误,如果您输入 8 个字符作为输入,那么 scanf 会将 9 个字符写入 8 个字符的数组。

【讨论】:

  • @MarounMaroun 由于x 在循环之前被初始化为1,我不明白为什么它不起作用。
  • @MarounMaroun 不将初始化放在实际的for 语句中有点不寻常,但是整个循环有点复杂而且不是很直接。 :)
【解决方案2】:
%s //

在 C 中 %s 需要一个指向字符串的指针,这与 %d 或 %c 不同(这些需要带有整数或字符的变量),因此您的指针必须以空值结尾,因此程序知道它必须在内存中的哪个位置停止打印,否则你在内存中打印随机的东西

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 2016-07-06
    • 1970-01-01
    相关资源
    最近更新 更多