函数始终返回0

时间:2015-05-02 09:29:24

标签: c++

功能:

int num(char a[]) //将字符串型的数字转化成int 
{
    int  z, x, y;
    z = 0;
    int m = sizeof(a);

    if(m == 1)
        z = a[0] - 48;

    if(m == 2)
    {
        x = a[0] - 48;
        y = a[1] - 48;
        z = x * 10 + y;
    }

    if(m == 3)
    {
        x = a[0] - 48;
        y = a[1] - 48;
        z = a[2] - 48;
        z = x * 100 + y * 10 + z;
    }

例如:char a[3]={2,15};,但是num(a) = 0 我不知道为什么。

1 个答案:

答案 0 :(得分:3)

声明为char a[]的函数的参数调整为char *类型。指针的大小不取决于数组作为参数传递的元素数量。

有效功能可以按以下方式查看

#include <cstring>

//...

int num( const char a[] )//将字符串型的数字转化成int 
{
    int  z,x,y;

    size_t n = std::strlen( a );

    z = 0;

    if( n == 1 )
        z = a[0] - '0';

    if ( n == 2 )
    {
        x = a[0] - '0';
        y = a[1] - '0';
        z = x * 10 + y;
    }

    if ( n == 3 )
    {
        x = a[0] - '0';
        y = a[1] - '0';
        z = a[2] - '0';
        z = x * 100 + y * 10 + z;
    }
    //...

如果只需要从字符数组中形成一个数字,就可以使用标准的C函数atoi。或者你可以写一个循环

z = 0;

for ( size_t i = 0; i < 3 && a[i]; i++ ) z = 10 * z + a[i] - '0';

考虑到如果它是函数必须做的所有事情,那么你应该包括return语句

return z;