将文件(argv[])作为strncmp()的参数时出现问题

xpszyzbs  于 2022-12-17  发布在  其他
关注(0)|答案(1)|浏览(116)

当我运行代码(代码在所附的图像)没有出现在输出屏幕上,当我尝试argv[]作为参数的strncmp()函数。我在网上搜索,但我没有看到任何应用程序像这样的strncmp!
我发现的一切几乎都是这样的:

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

Not MSVC version code
我尝试了我在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中也能工作?!How I pass my command line argumentsIt works on code::blocks

luaexgnf

luaexgnf1#

可能发生的情况是您没有配置MSVC来正确传递参数,这意味着您将传递一个空指针到strncmp(也可能是一个不确定的指针)。
这会导致 * 未定义的行为 ,并且很可能崩溃。
要解决这个问题,您
必须*始终检查argc,以确保您有足够的参数。
argc的值是有效元素的个数,所以如果你需要两个参数,那么你必须检查它至少是3

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

残酷地说,这本应该在任何像样的课堂、教程或书中教授。

相关问题