首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++,函数中的字符串长度始终相同

C++,函数中的字符串长度始终相同
EN

Stack Overflow用户
提问于 2015-01-22 06:21:25
回答 3查看 177关注 0票数 0

这段代码有什么问题?在我的函数测试中,输入的长度始终为4,无论我的字符串实际上是长还是短。

代码语言:javascript
复制
#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);
}
EN

回答 3

Stack Overflow用户

发布于 2015-01-22 06:37:52

数组在传递给函数时会衰减到指针

sizeof(arr)将提供char*的大小

票数 5
EN

Stack Overflow用户

发布于 2015-01-22 06:38:17

不要使用数组;而要使用std::vector。当你认为你正在向一个函数传递一个数组时,你实际上是在传递一个指针,而在你的体系结构中,指针是4字节宽的。char arr[]是一种在函数参数中拼写char* arr的奇怪方式。这就是所谓的“指针衰减”。

如果您确实需要使用原始指针,请将长度作为附加参数传入:

代码语言:javascript
复制
void test(size_t length, char* arr) {
    ...
}

test(input.length(), arr);
票数 3
EN

Stack Overflow用户

发布于 2015-01-22 06:41:16

当您在函数中执行sizeof(arr)时,您将获取指针的大小。像你这样向函数传递数组是一种语法上的甜头,它实际上是在传递一个指向数组的指针,而你只需要获取指针的大小(在你正在使用的机器上恰好是4字节)。您需要将数组的大小传递给另一个参数中的函数,或者使用方便的STL容器。

有关更多详细信息,请参阅this question

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28078130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档