“scanf”函数中的程序崩溃。为什么? #包括 #包括 int main(int argc,字符**argv) { 字符键,向量; 字符纯文本[101]; 字符密码; int i,密码值; int键长度,IVLength; scanf(“%s”,键); 扫描频率(“%s”,矢量); 返回0; }
输入“scanf”函数中的程序崩溃。为什么? #包括 #包括 int main(int argc,字符**argv) { 字符键,向量; 字符纯文本[101]; 字符密码; int i,密码值; int键长度,IVLength; scanf(“%s”,键); 扫描频率(“%s”,矢量); 返回0; },c,scanf,C,Scanf,输入scanf部件的值后,我的程序崩溃。我不明白为什么。我的问题 #include <stdio.h> #include <stdlib.h> int main(int argc, char** argv) { char key, vector; char plainText[101]; char cipher; int i, cipherValue; int keyLength, IVLength; scanf("%
scanf
部件的值后,我的程序崩溃。我不明白为什么。我的问题
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
char key, vector;
char plainText[101];
char cipher;
int i, cipherValue;
int keyLength, IVLength;
scanf("%s", key);
scanf("%s", vector);
return 0;
}
是:
键和向量属于char
类型,而不是指向char
的指针。只能容纳一个字符。1
%s
scanf
时,需要指向char
的指针。就目前的情况而言,你
正在传递未初始化的整数值,就好像它是指针一样
未定义的行为,您的程序因此崩溃。编译程序
一定给了你一个警告,不要忽略编译器的警告,
他们是来帮助你的,不是来烦你的scanf("%s", key);
scanf("%s", vector);
有关scanf的更多信息,请阅读
脚注 C中的字符串是以
“\0”
-终止字节。只有一个字符的字符串需要一个char
数组
尺寸为2或2以上。通常,维度n
的char
数组可以存储
最大长度为n-1
的字符串。当你经过时,你必须记住这一点
当函数需要字符串时,指向char
的指针指向函数。指向单个
char
会导致未定义的行为,因为它会溢出。编译器警告:启用它们(这里,gcc
或clang
的-Wformat
)并注意它们。可能的重复-它不是完全重复,但原因是相似的,阅读解决方案就足够了。@viraptor:这些甚至不是指针@我理解戴维谢林——这就是为什么我说它不是一个完全相同的复制品。这里的答案比我们在这里写的任何东西都要好。(除非你想从头开始解释指针/值的差异:))我不确定我是否理解你的意思@daviserring%100s
在这里可能更正确:)@viraptor是的,没错,我在回答中补充了这一点。
char key[101], vector[101];
...
scanf("%s", key);
scanf("%s", vector);
// or to limit the number of bytes
// written in the buffer, as pointed out
// in the comments by user viraptor
scanf("%100s", key);
scanf("%100s", vector);