argv数组是在调试属性中定义的,但是我正在访问内存错误:'0xC0000005:访问冲突读取位置0x00000000。
关于正在发生的事情有什么想法吗?
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
//TASK 2
for (int a = 0; a <= argc; a++) //counts until a = number of arguments
{
for (int x = 0; argv[a][x] == '\0'; x++) //counts until x = '\0'
{
cout << "Number of characters in argument " << argv[a] << "=" << x; //Outputs the argument and string length x
}
}
return 0;
}
for (int x = 0; argv[a][x] == '\0'; x++) //counts until x = '\0'
不,实际上,中间的条件是继续条件,而不是终止条件。
您需要类似:
for (int x = 0; argv[a][x] != '\0'; x++)
此外,该循环会累积打印出长度,您可能只希望在结尾处保留该长度。
那里的解决方案是移到x
外部范围并在内循环之后打印。
您还希望只处理给定的“真实”参数,进行更改:
for (int a = 0; a <= argc; a++)
进入:
for (int a = 1; a < argc; a++)
因为argv[argc]
规定为NULL,所以您不想取消引用它。并argv[0]
代表程序名称,您可能并不在意。
那会使您的代码看起来像:
#include <iostream>
using namespace std;
int main (int argc, char *argv[]) {
for (int a = 1; a < argc; a++) {
int x;
for (x = 0; argv[a][x] != '\0'; x++)
;
cout << "Chars in argument '" << argv[a] << "' = " << x << '\n';
}
return 0;
}
运行该代码可以testprog 1 12 123 "" 1234567890
得到:
Chars in argument '1' = 1
Chars in argument '12' = 2
Chars in argument '123' = 3
Chars in argument '' = 0
Chars in argument '1234567890' = 10
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句