给定一个字符串数组,我需要找出其中的字符串数。
我关注this
但如果我将其传递给函数,则不起作用。
这是我试过的代码
#include<string>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int f1(char* input1[])
{
string s="";
cout<<sizeof(input1)<<endl; //print 4
cout<<sizeof(char*)<<endl; //print 4
int l=sizeof(input1) / sizeof(char*);
//giving l=1 here but should be 8
}
int main()
{
char *str2[]={"baba","sf","dfvf","fbfebgergrg","afvdfvfv","we","kkhhff","L"};
int l=sizeof(str2) / sizeof(char*);
cout<<l<<endl; //print 8
cout<<sizeof(str2)<<endl; //print 32
cout<<sizeof(char*)<<endl; //print 4
f1(str2);
}
答案 0 :(得分:8)
sizeof(char*)
为您提供char*
指针的大小(系统上为4)。
sizeof(str2)
为您提供数组str2
的大小。有8个元素,每个元素都是指针类型。因此,系统的总大小为8 x 4 = 32。
要获取字符串的长度,请使用strlen
。
在C ++中考虑使用std::vector<std::string>>
替代。
答案 1 :(得分:1)
如果只有一个指向它的指针,则无法知道数组的长度。并且您只有一个指针,因为您无法按值传递数组。传递给函数的数组将自动衰减为指针,参数类型char* foo[]
等同于char** foo
。 size_of
没有帮助,因为它只会告诉指针本身的大小。
将长度作为参数传递给f1
。或者更好的是,使用std::vector
或std::array
。
我无法修改给定的函数原型
嗯,那很不幸。然后你必须采取一些技巧。最简单的解决方法是将长度存储在全局变量而不是函数参数中。
另一种可能性是终止值例如,始终使用nullptr结束数组,并且永远不允许其他元素具有该值。与c字符串以null字符终止的方式相同。然后你可以在遇到nullptr时停止迭代数组。但我认为你也无法修改数组。