这段代码有什么问题?无论我的字符串实际上是更长还是更短,输入在我的函数测试中总是长度为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);
}
答案 0 :(得分:5)
在传递给函数
时,数组衰减到指针 sizeof(arr)
会为您提供char*
答案 1 :(得分:3)
不要使用数组;而是更喜欢std::vector
。当你认为你将一个数组传递给一个函数时,你实际上是在传递一个指针,而你的架构指针是4个字节宽。 char arr[]
是一种在函数参数中拼写char* arr
的奇怪方法。这被称为“指针衰减”。
如果你真的必须使用原始指针,请将长度作为附加参数传递:
void test(size_t length, char* arr) {
...
}
test(input.length(), arr);
答案 2 :(得分:0)
在函数中执行sizeof(arr)
时,您将获取指针的大小。将数组传递给类似于函数的函数是一个语法糖,实际上它传递一个指向数组的指针,你只需要指针的大小(在你正在使用的机器上恰好是4字节)。您需要将数组的大小传递给另一个参数中的函数或使用方便的STL容器。
另请查看this question了解详情。