这段代码有什么问题?在我的函数测试中,输入的长度始终为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);
}发布于 2015-01-22 06:37:52
数组在传递给函数时会衰减到指针
sizeof(arr)将提供char*的大小
发布于 2015-01-22 06:38:17
不要使用数组;而要使用std::vector。当你认为你正在向一个函数传递一个数组时,你实际上是在传递一个指针,而在你的体系结构中,指针是4字节宽的。char arr[]是一种在函数参数中拼写char* arr的奇怪方式。这就是所谓的“指针衰减”。
如果您确实需要使用原始指针,请将长度作为附加参数传入:
void test(size_t length, char* arr) {
...
}
test(input.length(), arr);发布于 2015-01-22 06:41:16
当您在函数中执行sizeof(arr)时,您将获取指针的大小。像你这样向函数传递数组是一种语法上的甜头,它实际上是在传递一个指向数组的指针,而你只需要获取指针的大小(在你正在使用的机器上恰好是4字节)。您需要将数组的大小传递给另一个参数中的函数,或者使用方便的STL容器。
有关更多详细信息,请参阅this question。
https://stackoverflow.com/questions/28078130
复制相似问题