MALOUDA-PSA 2024-10-30 11:10 采纳率: 85.6%
浏览 5
已结题

c++中fgets的问题


char *pc_stock = "sz004560";
if (fgets(pc_stock, sizeof(pc_stock), stdin) != NULL) {
        int len = strlen(pc_stock); // 计算字符串长度

        // 小写转换为大写
        for (int i = 0; i < len; i++) {
            if (pc_stock[i] >= 'a' && pc_stock[i] <= 'z') {
                pc_stock[i] -= 32; // 将小写字母转换为大写
            }
        }

        // 输出转换后的字符串
        puts(pc_stock);
    }

if (fgets(pc_stock, sizeof(pc_stock), stdin) != NULL)
为什么这里会陷入无限循环?

  • 写回答

1条回答 默认 最新

  • micthis 2024-10-30 12:04
    关注

    char *pc_stock = "sz004560";
    上面这句是用指针指向一个字符串常量,字符串常量保存在只读内存中是不能修改的,而你下面的fgets试图修改这个只读内存会导致发生运行时错误。
    此外,由于pc_stock是一个指针,求一个指针变量的大小都是固定的(4或8),应该定义成数组。
    改成:

    char pc_stock[256] = "sz004560";
    if (fgets(pc_stock, sizeof(pc_stock), stdin) != NULL) {
            int len = strlen(pc_stock); // 计算字符串长度
            // 小写转换为大写
            for (int i = 0; i < len; i++) {
                if (pc_stock[i] >= 'a' && pc_stock[i] <= 'z') {
                    pc_stock[i] -= 32; // 将小写字母转换为大写
                }
            }
            // 输出转换后的字符串
            puts(pc_stock);
        }
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月30日
  • 创建了问题 10月30日