读取/proc/pid/maps时出现分段错误

读取/proc/pid/maps时出现分段错误,c,segmentation-fault,C,Segmentation Fault,我试图逐行阅读地图但我得到了错误核心分段错误错误。。。有人能给我一些关于我的代码的建议吗?我使用的是3.13.0-32-generic int main() { char buf[512]; FILE *f; sprintf(buf, "/proc/%d/maps", getpid()); f = fopen(buf, "rt"); while (fgets(buf, 512, f)) { unsigned int from, to, pg

我试图逐行阅读
地图
但我得到了错误核心
分段错误
错误。。。有人能给我一些关于我的代码的建议吗?我使用的是
3.13.0-32-generic

int main()
{
    char buf[512];
    FILE *f;
    sprintf(buf, "/proc/%d/maps", getpid());
    f = fopen(buf, "rt");
    while (fgets(buf, 512, f)) {
        unsigned int from, to, pgoff, major, minor;
        unsigned long ino;
        char flags[4];
        int ret = sscanf(buf, "%x-%x %c%c%c%c %x %x:%x %lu ", &from, &to, flags[0],flags[1],flags[2],flags[3], &pgoff, &major, &minor,ino);
            if (ret != 10)
            break;
    }
}

您需要将指针传递给
标志
数组的成员,而不是直接传递它们,这同样适用于
ino
参数:

sscanf(buf, "%x-%x %c%c%c%c %x %x:%x %lu ", &from, &to,
    &flags[0], &flags[1], &flags[2], &flags[3],
    &pgoff, &major, &minor, &ino);
或者,一次扫描所有字符:

sscanf(buf, "%x-%x %4c %x %x:%x %lu ", &from, &to,
    flags, &pgoff, &major, &minor, &ino);

请注意
标记
之前缺少的
&
,因为数组在传递给函数时会自动转换为指向其第一个元素的指针。

您需要将指针传递给
标记
数组的成员,而不是直接传递它们,这同样适用于
ino
参数:

sscanf(buf, "%x-%x %c%c%c%c %x %x:%x %lu ", &from, &to,
    &flags[0], &flags[1], &flags[2], &flags[3],
    &pgoff, &major, &minor, &ino);
或者,一次扫描所有字符:

sscanf(buf, "%x-%x %4c %x %x:%x %lu ", &from, &to,
    flags, &pgoff, &major, &minor, &ino);

请注意
标记
之前缺少的
&
,因为数组在传递给函数时会自动转换为指向其第一个元素的指针。

在scanf调用replace中

flags[x]


scanf调用replace中的
ino

也是如此

flags[x]


同样适用于
ino

谢谢你的回复…我已经纠正了这个问题,但错误仍然存在…我认为同样适用于
ino
谢谢你的回复…我已经纠正了这个问题,但是错误依然存在……我认为,
ino
也是如此,如果您使用
gcc-Wall-Wextra-g
进行编译,您可能会收到警告,您也可能自己进行了调试。谁投票关闭了此功能?这个问题包含一个错误描述和一个最小的自包含示例,您还需要什么?如果您使用
gcc-Wall-Wextra-g
编译,您将收到警告,并且您可以自己调试。谁投票关闭此问题?问题包含一个错误描述和一个最小的自包含示例,您还需要什么?