gpt4 book ai didi

来自 argc 的 C 段错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:44 24 4
gpt4 key购买 nike

我目前正在尝试编写我的 CS 实验室代码,但遇到了一个我看不到的段错误。我是在做傻事还是什么?代码应采用命令行参数(“blah.exe hello world”)并在其周围带有横幅输出。我们类没有 C 的先验知识,但有数据结构的先验类(class)。

示例输出

===============
= hello world =
===============

来源:用 gcc -std=c99 -Wall bannerize.c 编译

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

int main(int argc, char* argv[]) {
if(argc <= 1) {
return EXIT_FAILURE;
}

printf("TEST");
int row_length = argc + 3; //3 for space after last word and 2 extra border chars
for(int i = 1; i < argc; i++, row_length += strlen(argv[i]));

printf("TEST2");
char c;
while((c=getchar())!=EOF) {
printf("TEST3");
for(int i = 1; i < argc; i++, printf("%c", c));
printf("\n");

printf("%c ", c);
for(int i = 1; i < argc; i++, printf("%s ", argv[i]));
printf("%c\n", c);

for(int i = 1; i < argc; i++, printf("%c", c));
printf("\n");
}

return EXIT_SUCCESS;
}

在没有参数的情况下运行效果很好,但添加任何命令行参数都会在打印任何内容之前给出段错误。

最佳答案

for(int i = 1; i < argc; i++, printf("%s ", argv[i]))

这是一种编写for 的奇怪而扭曲的方式。考虑当 i == argc - 1 时会发生什么。您递增它,然后访问 argv[argc]。这必然是 NULL。

代替这种神秘的(ZING!)编写 for 的方式,尝试使用实际的主体:

for(int i = 1; i < argc; i++) {
printf("%s ", argv[i]);
}

要注意的是,仅当条件 (i > argc) 成立时,主体才会执行。

关于来自 argc 的 C 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21689565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com