gpt4 book ai didi

c - 调试断言失败。 C

转载 作者:行者123 更新时间:2023-11-30 18:54:36 27 4
gpt4 key购买 nike

尝试获取文本文件中的行数。我收到了以前从未见过的错误。

错误表明调试断言失败。表达式 c>=-1 && c <=255

void get_lines(FILE* fp, int* plines){

int i=0;

char c;

int number_of_conversions;

number_of_conversions = fscanf(fp, "%c", &c);




while (number_of_conversions != EOF && number_of_conversions != 0 ){


number_of_conversions = fscanf(fp, "%c", &c);



if (c == '\n' ){
i++;
}


}
*plines = i;


}

最佳答案

您提供的代码与您提供的错误消息不对应。该错误消息与源代码中其他位置的断言相关,具有以下形式:

 assert(c>=-1 && c <=255);

它发出的问题可能与变量 c 有关。在该断言出现时具有带符号字符类型的范围内( signed char ,或 char 在默认 char 带符号的系统上)。所涉及的代码的要点很可能归结为以下内容:

char c = getc(fp);        /* DO NOT DO THIS */
assert(c>=-1 && c <=255);

这是一个常见错误:getc()getchar()返回类型int为了能够表示 unsigned char 类型的所有可能值, -1。如果将结果赋值给字符类型的变量,则

  1. 如果结果超出类型 char 可表示的范围,您可以调用未定义的行为。 (例如,在具有 8 位、带符号默认 char s 的系统上为 128 - 255)
  2. 如果程序的行为恰好一致(除非所涉及的字符类型是无符号的,否则您不能依赖它),您将失去区分错误条件和有效数据的能力。
  3. 如果目标字符类型是有符号的,那么虽然某些输入的结果行为未定义,但合理可能的实际行为将是 c在某些情况下取小于-1的值。在这种情况下,您可能会遇到断言失败。 (“可能”是因为当涉及 UB 时,没有什么是确定的。)

为了避免这些问题,请确保将函数结果分配给适当类型的变量,特别是分配 getc() 的结果。和getchar()到至少与 int 一样宽的有符号整数类型.

关于c - 调试断言失败。 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29990013/

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