我正在使用连接器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;
}
在这种情况下,您需要扩展结构。