【发布时间】:2019-12-01 14:08:24
【问题描述】:
我试图制作一个程序,您首先插入一个数字来表示您的名字有多少字母。然后我想得到你的名字(使用数组)。这个程序的问题是,如果我为N 插入1,然后插入比我们在开始时输入的字母更多的name。为什么这行得通,我得到了全名?
第二个问题是如何将char 转换为int 所以如果用户在他们的名字中插入了多少个字母的数字,然后插入一个包含更多字母的名字,我可以打印“错误你为您的名字插入比预期更多的字母”?
#include <stdio.h>
int main()
{
int N;
printf("Insert how much letter does your name have");
scanf("%d",&N);
char name[N];
printf("Insert your name ");
scanf("%s",&name);
printf("You insert %s",name);
return 0;
}
【问题讨论】:
-
您忘记了需要一个元素来存储字符串的
\0-终止符。如果您像现在一样进行操作,您将很容易陷入缓冲区溢出。scanf()也应该有一个长度修饰符以避免完全相同的事情。 -
N 个字符的数组没有足够的元素用于 N 个字符的名称。终止空值需要 +1。越界写入具有未定义的行为,可接受的行为之一是完全忽略情况,结果不可预测。要读取名称,您可以分配一个数组,该数组允许名称 一个 比预期的大,然后如果名称确实那么长则出错...
-
您的
scanf()调用使用%s没有最大长度修饰符,因此会愉快地写出您的数组范围,这是未定义的行为。