我必须编写一段代码,基本上执行c++中的strlen()函数,哪里出了问题
I have to write a code that basically performs the strlen() function in c++, where have I gone wrong?
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
}
此处更改的部分由^^^
表示
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 无法执行内部函数 strlen
- 恒定字符阵列的获取字符串长度函数(strlen)不是恒定表达式
- 无法解析函数'strlen' - Eclipse cpp
- 带有 #include< iostream.h> 的程序允许使用 strlen() 等字符串函数。为什么?
- 我必须编写一段代码,基本上执行c++中的strlen()函数,哪里出了问题
- strlen函数与循环不兼容,循环变量不兼容
- 如何使用strlen函数获取字符串的长度
- 在 C# 中处理 char*(strlen 函数?)
- C++函数通过strlen()运行'string'类型参数,将新值保存到虚拟类实例,将虚拟类传递给新函数。为什么?
- 为什么函数"strlen"不能像这样修改"ch1"的长度?
- 创建我自己的strlen和子字符串函数
- strlen函数总是返回0