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
关于c++ - 我必须编写一个基本上在 C++ 中执行 strlen() 函数的代码,我哪里出错了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29204230/