如何将整数传递给函数并返回一个字符串

时间:2015-04-19 13:29:42

标签: c

我正在尝试编写一个函数(并且严重失败!!),它将int作为参数传递并返回从mysql查询生成的字符串 - 请参阅下面的代码:

我希望我的工作能够传递一些参数(1个int和2个字符)并返回3个字符串,我想这些将需要一个结构和指针,但我会从简单的东西..先爬......后来运行:)。

以下是我编写的代码我删除了该函数,但它在编译时失败了

retString =  strFunction(Value); 

错误:

warning: assignment makes pointer from integer without a cast [enabled by default]

如果需要,我可以发布完整的代码..

非常感谢提前。

int main(int argc, char *argv[])
{

char *retString;
retString =  strFunction(Value);
printf("The Return string is:  %s", retString);
Exit (0);

}


char *strFunction(int Value)
{

perform code here using value;
Return retString;

}

好的,这是完整的代码..凌乱我知道......尴尬让我最好发帖...

int main(int argc, char *argv[])
{
int Exhibit = 1;
char *rtn_Exhibition;
rtn_Exhibition =  rtn_ex(Exhibit);
printf("The Exhibition is set to:  %s", rtn_Exhibition);
}


char *rtn_ex(int Exhibit)
{
static char selectEx[2];
unsigned int i;
char selectEx_rtn[20];
memset(selectEx, 0, sizeof(selectEx));
sprintf(selectEx, "SELECT exhibition_description FROM exhibitions WHERE exhibition_id='%d'",Exhibit);
printf("\nThe SELECT statement you have built is: %s\n", selectEx );
connectDB();
if (mysql_query (conn, selectEx) != 0)
    {
        print_error (conn, "mysql_query() failed");
    }
else
    {
    res_set = mysql_store_result (conn); /* generate result set */
    // printf("The value of  the result set is: %d\n", res_set);    
    if (res_set == NULL)
        { 
            print_error(conn, "mysql_store_result() failed");
        }
    else
        {
        //process_result_set(conn, res_set);
        MYSQL_ROW row;
        while ((row = mysql_fetch_row (res_set)) != NULL)
        {
            for (i = 0; i < mysql_num_fields (res_set); i++)
            {
                sprintf(selectEx_rtn, "The exhibition name is: %s",   (row[i]));
            }

        }
    }
    mysql_free_result(res_set);
}
disconnectDB();
return selectEx_rtn;
}

您好T感谢您的回复,回答您的意见:

1)这是正确的,我没有发现。是的,SELECT语句有70个字符+单引号中的int是1到9的数字。我已经将数组调整为80个字符

2)MYSQL_RES指针在程序中先前设置:

MYSQL_RES * res_set;

3)我将此调整为30个字符,但是我收到一条错误,指出selectEX_rtn warning:function返回局部变量的地址。我将selectEx_rtn更改为指针并且函数正常工作但之后直接死于分段错误

1 个答案:

答案 0 :(得分:0)

这里有很多错误。

  1. 您将static char selectEx[2];声明为宽度为两个字符的字符数组,稍后您尝试执行此操作:sprintf(selectEx, "SELECT exhibition_description FROM exhibitions WHERE exhibition_id='%d'",Exhibit);。这将导致缓冲区溢出。对于查询的静态部分,您需要70个字符。假设您使用的是32位整数,则需要另外10个字符以确保您可以保留最长的字符。从这里你应该声明selectEX至少80个字符宽。 建议:将 selectEX 的大小设置为至少80个字符宽(并仔细检查我对所需字符数的计算)。

  2. 在这行代码res_set = mysql_store_result (conn);中,您使用 res_set 而未声明它。编译器可能假设 res_set 是一个int,并且看起来mysql_store_result正在返回一个指针。这可能是您的错误的来源。 建议:正确声明 res_set

  3. 在这行代码sprintf(selectEx_rtn, "The exhibition name is: %s", (row[i]));中,您已声明 selectEX 为二十个字符宽的数组(char selectEx_rtn[20];)。然而静态部分&#34;展览名称是:&#34;需要24个字符。这里有另一个缓冲区溢出,这不计算row[i]中的字符数。 建议:将 selectEx 的声明更改为足以容纳数据。此外,使用带有%s的宽度说明符,%15s可能会有所帮助。

  4. 希望这有帮助, T