我的程序从文件中读取记录,并为文件中的每条记录从数据库中获取值。我在我的 Pro*C 程序中声明了一个宿主变量。我在程序内的一个选择查询中使用了该主机变量。变量的内存不会为每条记录清除。
例如,对于第一条记录,sql 查询获取“ABCD”。然后对于第二条记录,查询获取“EFGHIJKL”。对于第三条记录,DB 中的实际值为“GHI”,但内存没有被清除,它会打印“GHIHIJKL”。
如何解决?
我的程序从文件中读取记录,并为文件中的每条记录从数据库中获取值。我在我的 Pro*C 程序中声明了一个宿主变量。我在程序内的一个选择查询中使用了该主机变量。变量的内存不会为每条记录清除。
例如,对于第一条记录,sql 查询获取“ABCD”。然后对于第二条记录,查询获取“EFGHIJKL”。对于第三条记录,DB 中的实际值为“GHI”,但内存没有被清除,它会打印“GHIHIJKL”。
如何解决?
这里基本上你应该做什么。还有一个 Pro*C 内联设置应该自动执行此操作,但我遇到了一些问题,所以我更喜欢这个解决方案,它既快速又简单。
VARCHAR var[50+1]; /* Add 1 char more than the size of the queried column of the database */
EXEC SQL SELECT thing INTO :var WHERE /* whatever */
if(sqlca.sqlcode == 0)
var.arr[var.len] = 0; /* Add the \0 char at the end of you var.
您应该使用数据库调用提供的长度,为您提供处理包含 NUL 字节的数据的能力。
或者您使用给定的长度手动终止您的字符串。这仅适用于“NUL-less”字符串。