当我运行代码(附图中的代码)时,当我尝试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文件,它们的内容完全相同。
我怎样才能重写我所附图像中的代码,使其在MSVC中也能工作?!如何传递命令行参数它适用于code::blocks
可能发生的情况是您没有配置MSVC来正确传递参数,这意味着您将传递一个空指针给strncmp
(也可能是一个不确定的指针)。
这会导致未定义的行为,并且很可能崩溃。
要解决必须总是检查argc
,以确保你有足够的参数。
argc
的值是有效元素的数量,所以如果你期望两个参数,那么你必须检查它至少是3
:
if (argc < 3)
{
printf("Not enough arguments! At least two expected.n");
return 1;
}
老实说,这应该在任何像样的课程、教程或书籍中教授。