我想在需要 int 值的函数中使用 strlen()返回的数字。
functionName((strlen(word)+strlen(otherWord)+1));
这段代码不起作用,因为它们返回size_t。
有没有办法将结果转换为int所以我可以进行加法运算并将它们用作int?
答案 0 :(得分:5)
其他大多数答案都是使用C风格的演员表,而你在C ++中不应该这样做: 你应该static cast。
functionName( static_cast<int>((strlen(word)+strlen(otherWord)+1));
答案 1 :(得分:2)
首先,您需要检查是否可以添加值,然后您需要检查是否可以转换为int,以及您是否已投射..
sizt_t size = strlen(word);
if (std::numeric_limits<size_t>::max()-size >= strlen(otherword))
{
size += strlen(otherword);
if (std::numeric_limits<size_t>::max()-size >= 1))
{
size += 1;
if (size <= std::numeric_limits<int>::max())
{
functionName(int(size));
}
else
{
//failed
}
}
else
{
//failed
}
}
else
{
//failed
}
答案 2 :(得分:0)
除非你在这里有veeery长字符串,否则使用强制转换是安全的:
functionName((int)(strlen(word)+strlen(otherWord)+1));
如果您愿意,可以使用static_cast<int>
,但现在没有差异。
functionName(static_cast<int>(strlen(word)+strlen(otherWord)+1));
答案 3 :(得分:0)
size_t
在内部unsigned int
。将其转换为int
并完成它:
functionName(static_cast<int>((strlen(word)+strlen(otherWord)+1));
或C风格(不鼓励但合法):
functionName((int)((strlen(word)+strlen(otherWord)+1));
这些长度的总和有多大可能超过0x7fffffff(这是32位平台上int
的限制)?可能不太可能。
答案 4 :(得分:0)
这段代码可以工作,除非你的编译器做了一些非常奇怪的事情,或者你没有向我们展示实际的代码。
唯一可能出错的是溢出错误(无符号整数可以包含比有符号整数更大的值)。如果你真的认为你的字符串会变得非常大,你可以用std::numeric_limits<int>
检查它。
答案 5 :(得分:0)
在C ++中使用otherWord.length()
:functionName( word.length() + otherWord.length() )
。
这是strlen()
functionName((int)(strlen(word)+strlen(otherWord)+1));
的一种方法。
#include <iostream>
#include <string>
using namespace std;
int functionName(int rstr )
{
return rstr;
}
int main ()
{
char word[] = "aaa";
char otherWord[] = "bbb";
cout<< "word = "<<word<<"\n" ;
cout<< "otherWord = "<<otherWord<<"\n" ;
cout<< "The sentence entered is "<< functionName((int)(strlen(word)+strlen(otherWord) ))<<" characters long \n\n";
return 0;
}