我对如何在写入文件时使用格式化字符串有点困惑,而且通常我都会猜测sprintf

#include <stdio.h>

int main(int argc, char* argv[])
{
    FILE *fp;
    const char *exts = ".txt";
    char *saveToPath;

    sprintf(saveToPath, "/Path/To/My/File%s", exts);

    fp = fopen(saveToPath, "w+");
    fprintf(fp, "This is testing for fprintf...\n");
    fputs("This is testing for fputs...\n", fp);
    fclose(fp);
}

我在尝试格式化的saveToPath时得到一个segmentation fault,但是如果我使用一个纯字符串const char*,比如“/Path/To/My/File.txt”,它就会工作。

最佳答案

为saveToPath变量分配内存
例如

char saveToPath[100];

另外,考虑使用snprintf来避免缓冲区溢出
例如
snprintf(saveToPath, 100 ,"/Path/To/My/File%s", exts);

这样您就可以确保不会为saveToPath写入超过100字节的内容

关于c - 写入文件时的C格式字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30566137/

10-11 16:22