C语言 Files (argv[])作为strncmp()参数的问题



当我运行代码(附图中的代码)时,当我尝试argv[]作为strncmp()函数的参数时,输出屏幕上没有出现任何内容。我在网上搜索,但我没有看到任何应用程序这样的strncmp!

我发现的一切几乎都是这样的:

int strncmp(
const char *string1,
const char *string2,
size_t count
);

非MSVC版本码

我尝试了我在MSVC中附加的图像中的代码,如下所示:


#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include<string.h>
void main(int argc, char *argv[]) {

system("cls");
if (!strncmp(argv[1], argv[2], 8))
printf("Both strings are the same!");
else
printf("Not same!");
}

但是输出屏幕上什么也没有MSVC没有检测到错误和警告argv[1]argv[2]都是我之前创建的。txt文件,它们的内容完全相同。

然后,我用两个字符串数组而不是以前的.txt文件来尝试这段代码,它像我预期的那样工作并且很好。(根据字符串输出"两个字符串是相同的!">"不相同!">)

我怎样才能重写我所附图像中的代码,使其在MSVC中也能工作?!如何传递命令行参数它适用于code::blocks

可能发生的情况是您没有配置MSVC来正确传递参数,这意味着您将传递一个空指针给strncmp(也可能是一个不确定的指针)。

这会导致未定义的行为,并且很可能崩溃。

要解决必须总是检查argc,以确保你有足够的参数。

argc的值是有效元素的数量,所以如果你期望两个参数,那么你必须检查它至少是3:

if (argc < 3)
{
printf("Not enough arguments! At least two expected.n");
return 1;
}

老实说,这应该在任何像样的课程、教程或书籍中教授。

最新更新