gpt4 book ai didi

c++ - 我必须编写一个基本上在 C++ 中执行 strlen() 函数的代码,我哪里出错了?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:18:38 27 4
gpt4 key购买 nike

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/

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