【发布时间】:2014-06-11 14:29:01
【问题描述】:
我需要 C Primer Plus 对这个练习的帮助。
编写一个程序,请求您的名字并使用它执行以下操作: 将其打印在比名称宽三个字符的字段中
#include<stdio.h>
#include<string.h>
int main()
{
char a[40];
int p,v=0;
printf("Enter your first name: \n");
scanf("%s",a);
p= strlen(a);
v==p+3;
printf("%s",a);
}
我不知道如何使用什么作为宽度的修饰符 我应该在 % 和 s 之间添加什么?
【问题讨论】:
-
我的名字是“1234567890123456789012345678901234567890 nop nop nop jmp 0x70002345”
-
“在字段中打印...”:名称在字段中是右对齐还是左对齐?
-
@GradyPlayer 想说的是:你有一个缓冲区溢出,你输入的名字超过 40 个字符。您应该注意始终将输入限制为保留内存的最大长度!
-
使用
if (scanf("%39s",a) != 1) Handle_NoValidInput()。39防止@Peter Miehle 和 Grady Player 提到的缓冲区溢出。非空格char要扫描的最大宽度是39,代码需要39char+ 1(对于'\0')来保存。