程序在`scanf`函数中崩溃。为什么?

时间:2018-02-02 03:22:43

标签: c 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;
}

输入scanf部分的值后,我的程序崩溃了。我不明白为什么。

1 个答案:

答案 0 :(得分:1)

的问题
scanf("%s", key);
scanf("%s", vector);

是:

  1. keyvector属于char类型,不是指向char的指针。只能容纳一个字符。 1
  2. %s scanf需要指向char的指针。就像现在一样,你 正在传递未初始化的整数值,就好像它是指针一样 未定义的行为和您的程序因此而崩溃。编译器 一定要给你一个警告,不要忽略编译器的警告, 他们在那里帮助你,而不是惹恼你。
  3. 正确的版本:

    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);
    

    有关scanf的详情,请参阅the documentation

    <强>脚注

    1 C中的字符串是以字符串结尾的字符序列 '\0' - 终止字节。具有单个字符的字符串需要char数组 尺寸2或更大。通常,char维{@ 1}}数组可以存储 最大长度为n的字符串。你必须在传球时记住这一点 指向n-1指向函数的指针。指向单个的指针 char会导致未定义的行为,因为它会溢出。