C 缓冲区的名称是什么,可以溢出buf、msg、len或out

C 缓冲区的名称是什么,可以溢出buf、msg、len或out,c,stack,overflow,variable-assignment,C,Stack,Overflow,Variable Assignment,我是新来的,我似乎不明白你能帮我确定缓冲区可能会溢出,为什么 #include <stdio.h> #include <string.h> #define S 100 #define N 1000 int main(int argc, char *argv[]) { char out[S]; char buf[N]; char msg[] = "Welcome to the argument echoing program\n"; in

我是新来的,我似乎不明白你能帮我确定缓冲区可能会溢出,为什么

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

#define S 100
#define N 1000

int main(int argc, char *argv[]) {
    char out[S];
    char buf[N];
    char msg[] = "Welcome to the argument echoing program\n";
    int len = 0;
    buf[0] = '\0';
    printf(msg);

    while (argc) {
        sprintf(out, "argument %d is %s\n", argc-1, argv[argc-1]);
        argc--;``
        strncat(buf,out,sizeof(buf)-len-1);
        len = strlen(buf);
    }
    printf("%s",buf);
    return 0;
}
问题在于:

sprintf(out, "argument %d is %s\n", argc - 1, argv[argc - 1]);

当您遇到这样的问题时,最好仔细检查代码注释行,直到程序停止崩溃。然后您将知道错误在哪里:D

首先,如果您在此处发布代码,请正确缩进它。这本书读起来很恐怖。那么,我们不是来给你做作业的。要解决这个问题,请检查写入其中一个缓冲区的所有函数,并考虑它可能溢出的情况。len=strlenbuf;似乎为一个线性问题付出了二次代价。@KerrekSB非常感谢我在这方面的想法