Не определяется длина вектора c++
Пытаюсь определить длину переданого в функцию вектора, но всегда длина определяется как 8
#include <iostream>
#include <vector>
#include <cstddef>
using namespace std;
class myString{
private:
vector<char> str;
public:
myString(const char x[]){
vector<char> tempStr( x, x+sizeof(x)/sizeof(*x) );
str = tempStr;
};
void print(){
for (int i =0; i<str.size();i++){
cout<<str[i];
};
cout<<""<<endl;
};
void find(const char c[]){
vector<char> temp(c, c+sizeof(с)/sizeof(*с));
cout<<temp.size()<<endl;
};
};
int main()
{
myString str1("dasdasda");
str1.print();
str1.find("asd");
str1.find("dasda");
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
[Устало вздохнув, монотонным голосом] как известно при передаче в функцию массива (почему вы его называете вектором?!) он преобразуется в указатель, так что
sizeof(x)/sizeof(*x)
есть
sizeof(char*)/sizeof(char)
или для 64-разрядного приложения, 8/1 = 8.
Что спросили - то компилятор и ответил.
Если уж вы передаете строки, логичнее было бы работать со строками. Но, в конце концов, можно и
myString(const char x[]):str(x,x+strlen(x)+1){}
+1 - на тот случай, если вам и нулевой завершающий символ нужен.
Но лучше бы вам брать строку string, а не vector<char> - куда более естественно и удобно.