首页 > 解决方案 > 二进制+的C无效操作数(有'char *'和'char *')?

问题描述

在 CI 中有:

filedata->string_table + (X)->sh_name

现在我想在它旁边添加以下字符串:“new”

我试过了:

filedata->string_table + (X)->sh_name + "new"

但这不会编译,我得到:

readelf.c:6807:83: error: invalid operands to binary + (have ‘char *’ and ‘char *’)
  filedata->string_table + (X)->sh_name : filedata->string_table + (X)->sh_name+"new")
                                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~      ^

如何解决这个问题?

标签: arrayscstringmacroschar

解决方案


使用正确的方式连接字符串。

如果要将结果添加到现有缓冲区,请使用strcat()连接字符串。

char buffer[1024000]; /* enough size */
strcpy(buffer, filedata->string_table + (X)->sh_name);
strcat(buffer, "new");

您还可以使用snprintf()将连接的结果放在缓冲区中。

char buffer[1024000]; /* enough size */
snprintf(buffer, sizeof(buffer), "%s%s",
    filedata->string_table + (X)->sh_name, "new");

要将结果打印到标准输出,请使用两个%s格式说明符连续打印两个字符串。

printf("%s%s",
    filedata->string_table + (X)->sh_name, "new");

如果字符串"new"是固定的,你也可以这样做:

printf("%snew",
    filedata->string_table + (X)->sh_name);

推荐阅读