如何访问指向数组的指针中的第一个元素

时间:2015-04-17 18:26:10

标签: mysql c arrays

第一篇文章所以请耐心等待。我正在尝试实现mysql C API的一部分来检索一个已知的字段,它将是一个TINYINT值(布尔值,1或0)

mysql C API提供了一个类型,它是一个指向数组MYSQL_ROW行的指针;其中通过row [i]访问数组的元素,其中i是索引。无论数据库中的数据类型如何,元素都将作为字符串返回。

我试图访问的字段显然是布尔值,如果查询找到该字段,则为1或0。我想对这个字段的值进行逻辑检查,但我正在努力解决类型问题。我尝试将row [i]转换为int但没有好处,我似乎得到了返回的指针。我知道C没有本机bool类型但可以实现。任何想法都会受到欢迎..这是我的代码,非常感谢提前 - 保罗

void process_result_set (MYSQL *conn, MYSQL_RES *res_set) {

MYSQL_ROW row;
unsigned int i;
unsigned int logonstatus;

while ((row = mysql_fetch_row (res_set)) != NULL)
{
for (i = 0; i < mysql_num_fields (res_set); i++)
{

    logonstatus = (int)(row[i]); // gives an int return but appears to     return a memory location i.e. a pointer
    printf("The value of logon status is: %d\n", logonstatus);
    printf("\nThe value of the logon field is:%s\n", row[i]);

}

}
if (mysql_errno (conn) != 0)
    print_error (conn, "mysql_fetch_row() failed");
else
printf ("%lu rows returned\n",(unsigned long) mysql_num_rows (res_set));
}

在回答你的问题时,是的,它是一个指向数组的指针,对于该特定字段,只有一个元素将存在,并且将被设置为1或0,或者该字段最初不会出现在查询中我正在跑步。

2个printf语句执行相同的操作,一个传递int,另一个传递一个字符串,这是使用mysql api时从数据库返回数据的方式。

非常感谢您的帮助。

我得到的输出如下:

(~/museuminfo) localhost $ ./museumDB

Connecting to MySQL Server...

Connection Successful

The SELECT statement you have built is: SELECT logon_status FROM users     WHERE userpin='2468'
The value of logon status is: 146753048

The value of the logon field is:1
1 rows returned

2 个答案:

答案 0 :(得分:0)

C中的字符串是指向字符数组的指针。类型为char *。所以,你想要取消引用row [i](这是一个指向char的指针,在这种情况下等于代表数字1的char,正如你所注意到的那样)。使用此:

logonstatus = (int)*row[i];

而不是

logonstatus = (int)row[i];

row之前的星号表示要查看名为row[i]的指针指向的值。希望这是有道理的。

答案 1 :(得分:0)

秘密在于:logonstatus = (int)(row[i]);。你说无论列有什么数据类型,MySQL都会返回字符串,这意味着row [i]是一个C字符串,转换为char*。这就是为什么你看到一个指针,并且转换为int对你没有帮助,因为变量仍然保持相同的值(但现在它是int而不是pointer ); C类型转换不转换值,只转换类型表示。

您需要将字符串转换为int,您可以使用的C函数是atoi()。您需要更新代码如下:logonstatus = atoi(row[i]);