我如何使用strlen()作为int?

时间:2014-02-28 17:33:25

标签: c++

我想在需要 int 值的函数中使用 strlen()返回的数字。

functionName((strlen(word)+strlen(otherWord)+1));

这段代码不起作用,因为它们返回size_t。

有没有办法将结果转换为int所以我可以进行加法运算并将它们用作int?

6 个答案:

答案 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;
}