将字符串写入c中的filename

vmpqdwk3  于 2023-01-20  发布在  其他
关注(0)|答案(1)|浏览(117)

我有这段代码,但不能让它正常工作。我想把字符串输出写到一个文件中。

static void wr_message_user_info_login(wi_p7_message_t *message) {
    wi_date_t           *date;
    wi_string_t         *string, *interval;
    wi_p7_uint32_t      uid, build, bits;

    wr_printf_block(WI_STR("Login: %@"),
        wi_p7_message_string_for_name(message, WI_STR("wired.user.login")));

    char *filename = "/.wirebot/wirebot.login";
    char *home_dir = getenv("HOME");
    char *filepath = malloc(strlen(home_dir) + strlen(filename) + 1);
    sprintf(filepath, "%s%s", home_dir, filename);

    FILE *fp;
    fp = fopen(filepath, "w");
    if (fp == NULL)
    {
    }
    else
    {
        fputs((WI_STR("Login: %@")), fp);
);
        fclose(fp);
    }

“登录名:%@”应写入文件。回显工作正常。

mwngjboj

mwngjboj1#

你提供了一段代码,但缺少了很多东西。如果你去掉你没有告诉我们的东西,它似乎可以工作:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static void wr_message_user_info_login() {
    const char *filename = "/.wirebot/wirebot.login";
    const char *home_dir = getenv("HOME");
    char *filepath = malloc(strlen(home_dir) + strlen(filename) + 1);
    if(!filepath) {
        printf("malloc failed\n");
        return;
    }
    sprintf(filepath, "%s%s", home_dir, filename);
    FILE *fp = fopen(filepath, "w");
    if (!fp) {
        printf("fopen failed\n");
        free(filepath);
        return;
    }
    free(filepath);
    fputs("Login: %@", fp);
    fclose(fp);
}

int main() {
    wr_message_user_info_login();
}

和示例运行:

$ mkdir ~/.wirebot && ./a.out && cat ~/.wirebot/wirebot.login
Login: %@

也许目录~/.wirebot在您的主机上不存在?

相关问题