gpt4 book ai didi

c - 为什么在此示例中我会收到带有 argv 的崩溃报告?

转载 作者:行者123 更新时间:2023-11-30 16:31:20 25 4
gpt4 key购买 nike

TL;博士

• 1. 为什么该代码在启动时给出崩溃错误?

• 2. 什么argv[]做?它收到你的cmd输入了吗?以及它与 argv 的区别1,2,3...等等?

• 3. 输出未显示我更改 argv[1] 时的预期内容与 VSF.txt

以下代码出现错误:

File: minkernel\crts\ucrt\src\appcrt\stdio\fopen.cpp
Line: 30
Expression file_name != null_ptr

error image

这个想法是用相应的数字打印每个文件行。我还不完全理解文件,但我相信 argv[1]是你在编译器提示符下写的,对吗?它与 argv 1,2,3...等有何区别?

如果我改变argv[1]VSF.txt (文件名)它显示奇怪的字符(不是里面的 VSF.txt )

VSF.txt image

cmdoutput

输出仅用一行显示所有内容,没有空格且行变量不递增;为什么它不打印 VSF.txt 的内容?

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main(int argc, char *argv[])
{
FILE *file = stdout;
int lines = 1, start = 1;
char ch;

if ((file = fopen(argv[1], "r")) == NULL)
{
printf("Impossivel de abrir o arquivo :%s", argv[1]);
exit(0);
}
while (ch = fgetc(file) != EOF)
{
if (ch == '\n')
{
lines++;
start = 1;
}
else if (start == 1)
{
printf("%d: ",lines);
putchar(ch);
start = 0;
}
putchar(ch);
}
fclose(file);
}

最佳答案

奇怪输出的问题在这里:

while (ch = fgetc(file) != EOF)

不等运算符!= 的优先级高于赋值运算符=。所以上面的表达式等同于:

while (ch = (fgetc(file) != EOF))

这会为 ch 分配一个 bool 值,0 或 1。这就是您获得输出的原因。将括号放在适当的位置:

while ((ch = (fgetc(file)) != EOF)

至于崩溃,发生这种情况是因为您在运行程序时没有告诉程序您要打开的文件的名称。如果您从命令提示符运行它,请按如下操作:

archives VSF.txt

如果从 Visual Studio 内部运行它,请转到项目设置,然后在“调试”下将“命令参数”设置为 VSF.txt。

关于c - 为什么在此示例中我会收到带有 argv 的崩溃报告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50667282/

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