gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:51:05 33 4
gpt4 key购买 nike

#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 的值后,我的程序崩溃了部分。我不明白为什么。

最佳答案

问题

scanf("%s", key);
scanf("%s", vector);

是:

  1. keyvectorchar 类型,而不是指向 char 的指针。只能容纳一个字符。1
  2. 使用 %s scanf 需要一个指向 char 的指针。就目前情况而言,你传递未初始化的整数值,就好像它是指针一样,那就是未定义的行为,并且您的程序因此崩溃。编译器一定已经给你警告了,不要忽略编译器的警告,他们是来帮助你的,而不是惹恼你。

正确的版本:

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

<小时/>

脚注

1C 中的字符串是以字符结尾的字符序列'\0'-终止字节。包含一个字符的字符串需要一个 char 数组维数为 2 或更高。一般来说,维度为nchar数组可以存储最大长度为n-1的字符串。通过时你必须记住这一点指向 char 的指针在需要字符串时指向函数。指向单个的指针char 将导致未定义的行为,因为它会溢出。

关于c - 程序在 `scanf` 函数中崩溃。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48575238/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com