gpt4 book ai didi

c - 访问冲突读取位置 0x00000000。与 argv[]

转载 作者:太空宇宙 更新时间:2023-11-04 01:34:31 28 4
gpt4 key购买 nike

我正在运行以下程序并遇到错误:

First-chance exception at 0x0f32d440 (msvcr100d.dll) in c.exe: 0xC0000005: Access violation reading location 0x00000000.
Unhandled exception at 0x772815de in c.exe: 0xC0000005: Access violation reading location 0x00000000.
The program '[9048] c.exe: Native' has exited with code -1073741510 (0xc000013a).

这是代码

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[], char *env[]) //char *argv[]
{
int i;

printf("These are the %d command- line arguments passed to main:\n\n", argc);
if(strcmp(argv[1],"123")==0)
{
printf("success\n");
}
else
for(i=0; i<=argc; i++)
//if(strcmp(argv[1],"abc")==0)

printf("argv[%d]:%s\n", i, argv[i]);
/*printf("\nThe environment string(s)on this system are:\n\n");
for(i=0; env[i]!=NULL; i++)
printf(" env[%d]:%s\n", i, env[i]);*/
system("pause");
}

问题应该出在strcmp函数上,但我不知道如何解决。谁能帮忙?

最佳答案

你(至少)有两个问题。

第一个是这样做的:

if(strcmp(argv[1],"123")==0) 

没有首先检查 argc >= 2

第二个是这样的:

for(i=0; i<=argc; i++) 

因为您应该处理参数 0argc - 1(含)。该循环所做的是通过 argc 处理参数 0 并且 argv[argc] 始终为 NULL

以下程序说明了解决此问题的一种方法:

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

int main (int argc, char *argv[]) {
int i;

printf ("These are the %d command-line argument(s) passed to main:\n", argc);
if ((argc >= 2) && (strcmp (argv[1], "123") == 0)) {
printf (" success\n");
} else {
for (i = 0; i < argc; i++) {
printf (" argv[%d] = [%s]\n", i, argv[i]);
}
}
return 0;
}

您可以看到,只有在确保正确填充了 argv[1] 之后,才会与 "123" 进行比较。此外,循环已更改为排除 argv[argc],因为这不是参数之一。成绩单如下:

pax> testprog
These are the 1 command-line argument(s) passed to main:
argv[0] = [testprog]

pax> testprog 123
These are the 2 command-line argument(s) passed to main:
success

pax> testprog a b c
These are the 4 command-line argument(s) passed to main:
argv[0] = [testprog]
argv[1] = [a]
argv[2] = [b]
argv[3] = [c]

关于c - 访问冲突读取位置 0x00000000。与 argv[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16953512/

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