使用snprintf进行字符串连接

时间:2015-12-02 17:12:31

标签: c string

我使用msgText制作字符串:

filename.txt

这是为了在snprintf中存储Linux命令。该命令将在稍后执行,并以天为单位输出%s的年龄。

这里的问题是:

这是错误的,因为error: format ‘%s’ expects a matching ‘char *’ argument 期望{{1}}有一个字符串参数。编译器报告此错误:

{{1}}

我该怎么办?

2 个答案:

答案 0 :(得分:2)

如果您希望替换%s,请向const char*提供snprintf个参数以及要写入的值。

如果您想在%s中使用文字msgText,则将%转义为%%,或将字符串作为单个参数传递给格式字符串{{ 1}}:

"%s"

答案 1 :(得分:1)

你不应该为这样简单的东西调用一个shell和两个date进程。您应该stat()该文件,并从C:

中的当前时间减去其mtime
#include <time.h>
#include <unistd.h>
#include <sys/stat.h>

double age(const char *path) {
    struct stat buf;

    if (stat(path, &buf)) {
        perror("stat");
        return -1;
    }

    time_t now = time(NULL);
    if (time < 0) {
        perror("time");
        return -1;
    }

    return difftime(now, buf.st_mtime) / 86400;
}

测试程序非常简单:

#include <stdio.h>
int main(int argc, char **argv)
{
    while (*++argv)
        printf("%s: %.0f days\n", *argv, age(*argv));
}