从 C 语言中的 MySQL 获得的 strcpy null 值



我正在使用连接器C连接到我的MySQL数据库。 我最近对数据库所做的修改现在允许我的 url 字段中的数据为 NULL。连接器 C 在读取 NULL 值时似乎没有任何问题,但是当我尝试使用 strcpy 将该值传递给我的数组结构时,程序崩溃了。这是我代码的简化版本:

mysql_real_connect(conn, server,user,password,database, port, NULL, 0);
mysql_query(conn, "SELECT * FROM main WHERE propType IN ('Single Family', 'Condominium')");
res = mysql_use_result(conn);
while (((row = mysql_fetch_row(res)) != NULL) && (row[0] != NULL)) {
    props[count].uniqueID = atol(row[0]);
    strcpy(props[count].address, row[1]);
    .
    .
    .
    strcpy(props[count].url, row[55]);
    count++;
}

通过跟踪行的输出,我确定是这行代码失败了,并且只有在行 [55] 为 (null( 时才失败:

strcpy(props[count].url, row[55]);

我对 C 相当陌生,我认为问题在于尝试将 strcpy 与空字符串一起使用。

有什么建议吗?

正如上面评论中所建议的,问题是row[55]具有NULL的值,因此strcpy()崩溃。也许您想尝试以下操作:

if (row[55] != NULL)
    strcpy(props[count].url, row[55]);
else
    props[count].url[0] = '';

下面是另一个示例代码,如果数据库包含NULL或空值,则使用位来存储:

if (row[55] != NULL)
{
    strcpy(props[count].url, row[55]);
    props[count].urlEmpty = false;
}
else
{
    props[count].url = '';          // Maybe you can skip this
    props[count].urlEmpty = true;
}

在这种情况下,您需要扩展结构。

相关内容

  • 没有找到相关文章

最新更新