代码块输出控制台已停止工作

标签 c string codeblocks

每当我将变量声明为 char 并将其扫描为字符串“%s”时,我的输出控制台就会崩溃。这是代码

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main()
{
    char a[20];
    int i;
    printf("Enter a name ");
    scanf("%s",&a);
    for(i=0;i<strlen(a);i++)
    {
        a[i] = toupper(a[i]);
        i++;
        printf("%s\n",toupper(a[i]));
    }
    return 0;
}

最佳答案

for 循环体内的第二个 i++; 可能会导致索引指向偏离一的位置,printf("%s\n",toupper(a[i])); 将超出调用 undefined behavior 的访问权限.

您可以从循环体内删除 i++

接下来,toupper(a[i]) 返回一个 int,它对于 %s 格式说明符无效,它再次调用 UB .

也就是说,

  • 为防止输入过长而导致缓冲区溢出,最好使用 scanf() 限制输入长度,

  • 您不需要传递数组的地址,只需传递数组名称即可

所以,总的来说,你应该写

scanf("%19s",a);

关于代码块输出控制台已停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39445813/

相关文章:

计算行星之间吸引力的方向

c - 从内核空间声明一个指向用户空间数组的指针并填充它

c++ - 如何使用 C/C++ 提取 pcap 文件的 TCP header 中的选项字段

java - 字符串拆分并存储在 2 个不同的列表中

c++ - 无法使用 MinGW 链接到 SDL2 函数

c - 将指针传递给结构体数组

VB.NET 查找字符串中两个单词之间的文本

JavaScript String.split 在字符串文字上生成数组

c - 如何找到我用C语言编写的程序所需的最低系统要求?

c++ - opencv undefined 我的库有问题吗?