【发布时间】:2021-12-31 05:19:46
【问题描述】:
我有一个从文件中读取包名及其目录的函数。我已经设置了一个变量来在另一个之前捕获一个项目(它们用逗号分隔)。当我附加到我的字符串时,它似乎添加它就好了。但是,当我重新分配字符串(将其压缩到实际大小)时,它拥有的字符会保留一半。
当我使用 for 循环来测试它时,每个字符之间都会投射出空字符。所以我有一个测试工作“duck”,当我将它打印为字符串时,它会写成“duck”但是如果它迭代它,它会变成“d”“”“u”“”“c”
while(1)
{
char c = fgetc(db);
actual_file_size++;
if(c == EOF)
{
//pkg_install_dir = realloc(pkg_install_dir, (sizeof(pkg_install_dir) + 2));
//printf("The install dir is: %s\n", pkg_install_dir);
break;
}
if(is_pkg_name) {
printf("Chracter being added to pkg_name: %c\n", c);
strcat(pkg_name, &c);
} else {
strcat(pkg_install_dir, &c);
}
if(c == ',')
{
printf("Actual file size int is: %d\n", actual_file_size);
printf("Package name before realloc: %s\n", pkg_name);
for(int i = 0; i < 5; i++)
{
printf("%c\n", pkg_name[i]);
}
pkg_name = realloc(pkg_name, actual_file_size);
is_pkg_name = 0;
actual_file_size = 0;
printf("The string is:%s\n", pkg_name);
}
终端输出:
【问题讨论】:
-
strcat(pkg_name, &c);这是错误的,因为strcat要求两个参数都是字符串。单个字符不是字符串,结果是未定义的行为。 -
@kaylum 谢谢你,我改变了一些东西并使用不同的方法修复了它,感谢反馈!
标签: c string char concatenation