错误:内部函数的漏洞

时间:2014-10-07 02:20:41

标签: c

过去几天我一直在学习c(还是初学者),我看到了一些代码:

int func()
{
    code..
    return 0;
error:
    return 1;
}

我正在试图找出error:部分做了什么,经过一段时间的谷歌搜索后我什么都没发现(我不确定它叫什么,我认为它就像在switch语句中那样崩溃)。我写了这个简单的代码来看它的作用:

int n;
char input[100];
int main()
{
    printf("Type a number: ");
    fgets(input, sizeof(input), stdin);
    sscanf(input, "%d", &n);
    printf("%d", 1/n); // Invoked error by inputing 0

    return 0;

error:
    printf("error busted");
    return 1;
}

当我运行它并键入0时,我得到一个浮点异常,但error:部分什么也没做,所以它是如何工作的?

2 个答案:

答案 0 :(得分:2)

error:goto error;使用static struct vfsmount *fs_set_subtype(struct vfsmount *mnt, const char *fstype) { int err; const char *subtype = strchr(fstype, '.'); if (subtype) { subtype++; err = -EINVAL; if (!subtype[0]) goto err; } else subtype = ""; mnt->mnt_sb->s_subtype = kstrdup(subtype, GFP_KERNEL); err = -ENOMEM; if (!mnt->mnt_sb->s_subtype) goto err; return mnt; err: mntput(mnt); return ERR_PTR(err); } ,但您的示例中没有这样的内容。

这是Linux内核(namespace.c)的一个片段:

goto

使用{{1}}容易出错,不鼓励,不适合初学者。

答案 1 :(得分:0)

error:goto的标签。由于你没有goto,它什么都不做。

您应该打开编译器中的所有警告。也不要使用goto - 其他方法更好