在 C 中从 MySQL 获取的 strcpy 空值

Strcpy Null Value Obtained From MySQL in C

我正在使用连接器 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] = '[=10=]';

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

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

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