C++,函数中的字符串总是有相同的长度
C++ , string in a function has always the same length
这段代码有什么问题?在我的函数测试中,输入的长度总是4,无论我的字符串实际上是更长还是更短。
#include <iostream>
#include <string>
using namespace std;
void test(char arr[]){
string input;
input = arr[0];
for (int i=1; i<sizeof(arr)/sizeof(char); i++){input=input+arr[i];}
cout << input << endl;
cout << "length: " << input.length() << endl;
}
int main(){
string input;
cout << "String: " << endl;
getline(cin, input);
char arr[input.length()];
for(int i=0; i<input.length(); i++) {arr[i] = input[i];}
test(arr);
}
数组在
传递给函数时衰减到指针
sizeof(arr)
会给你char*
的大小
不要使用数组;而是更喜欢std::vector
。当你认为你正在将数组传递给一个函数时,你实际上是在传递一个指针,在你的架构上,指针是 4 个字节宽的。 char arr[]
是一种在函数参数中拼写char* arr
的奇怪方式。这称为"指针衰减"。
如果确实必须使用原始指针,请将长度作为附加参数传入:
void test(size_t length, char* arr) {
...
}
test(input.length(), arr);
当您在函数中执行sizeof(arr)
时,您正在获取指针的大小。像你一样将数组传递给函数是一种语法糖,实际上它传递了一个指向数组的指针,你只是取指针的大小(在你使用的机器上恰好是 4 字节)。您需要将数组的大小传递给另一个参数中的函数,或使用方便的 STL 容器。
另请查看此问题以获取更多详细信息。
相关文章:
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何从void函数输出字符串
- 使用用户定义函数的字符串反转
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- 在c++构造函数中使用随机字符串生成器
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- C++:如何使函数只返回作为列表一部分的字符串
- 如何在C++中的同一函数中使用字符串和双精度
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 一个函数,用于查找字符串1包含字符串2 c++的次数
- 对函数 PlaySound 使用字符串变量
- 具有多个模板的模板函数,用于特定数据类型(如字符串)?
- 字符串化递归的"std::vector<std::vector<...>>"而不使用部分模板函数专用化
- Visual c ++,使用字符串引用/指针调用 dll 函数
- 构造函数字符串参数未设置窗口标题
- C++默认构造函数:字符串参数与字符串参数()
- 使用函数C++字符串输入
- c++模板函数字符串类型不匹配