我必须编写一段代码,基本上执行c++中的strlen()函数,哪里出了问题

I have to write a code that basically performs the strlen() function in c++, where have I gone wrong?

本文关键字:函数 strlen 中的 c++ 问题 执行 基本上 代码 一段      更新时间:2023-10-16

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] == ''; x++) //counts until x = ''
    {
        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] == ''; x++) //counts until x = ''

不,实际上,中间的条件是继续条件,而不是终止条件。

你需要这样的东西:

for (int x = 0; argv[a][x] != ''; x++)

此外,该循环会累积打印出您可能只想在末尾打印的长度。

解决方案是将x移动到外部作用域,并在内部循环之后打印

你还想只处理你得到的"真实"论点,改变:

for (int a = 0; a <= argc; a++)

进入:

for (int a = 1; a < argc; a++)

因为CCD_ 2被规定为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] != ''; 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
for (int a = 0; a <= argc; a++)
//                ^^

该循环将包括a[args](它是参数数组末尾的一个),然后取消引用它,从而导致未定义的行为——在您的情况下,这会导致访问冲突。当a小于argc时,需要循环。

这里首先需要计算每个参数的字符数。所以循环将一直到-

a < argc  

对于每个参数,您需要计算字符数。所以你需要计算字符直到null value。所以循环将一直到-

argv[a][x] != '' 

现在您只需打印每个参数的字符数:)

更改此部分:

for (int a = 0; a < argc; a++) //counts until a = number of arguments
                 ^^^
{
    int x;
    for (x = 0; argv[a][x] != '' ; x++) //counts until argv[a][x] == ''
                   ^^^
    {
        ;
    }
    cout << "Number of characters in argument " << argv[a] << " = " << x <<"n"; //Outputs the argument and string length x
}

此处更改的部分由^^^ 表示