我希望您帮助了解用户可以向以下程序输入什么内容来生成输出:U%ae'$ffq' ong string
int main(void) {
int i=0;
char j[22]="This is a long string", k[3];
scanf("%2s ", k);
sprintf(j, k);
printf("%s", j);
for (; i< 21; printf("%c", j[i++]))
;
return 1;
}
我不明白一些事情:
k 只能从用户处获取两个字符 - 这就是 "%2s"
的意思吗?然后将数组 k 指向的内容写入 j 指向的数组中,因此 j
并不指向 k,但如果我们将 j[5]
我们'仍然会得到i
。所以我不明白我们如何获得这个输入,因为输入将被切成两个字符 j[0], j[1]
将是输入中的两个字符,其余的j[i]
将是“这是一个长字符串”的原始其余部分。
最佳答案
我只是在这里猜测,但问题可能出在循环上。您不检查字符串终止符,而是打印所有数组,无论字符串是否结束。
如果将循环更改为:
for (; i < 22 && j[i] != '\0'; printf("%c", j[i++])) ;
您应该得到预期的输出。
(注意:我还将 21
更改为 22
,这是数组的大小。您当然可以这样做 i <= 21
因为这是相同的。)
编辑:在 hmjd 发表评论后重新阅读问题。
如果输入被 scanf
读取包含百分比 ( '%'
) 字符的调用 sprintf
之后将尝试将其解析为格式化代码。如果我使用输入 %d123
测试该程序,然后k
将是"%d"
正如预期的那样,但结果数组 j
将是"192795408\0long string"
.
关于c - 该程序可能的输入是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11539763/