以下程序会产生奇怪的行为: 生成文件
all:
gcc main.c -o main;
构建示例
./main 3 5 6 9
main.c
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main(int argc, char **argv) {
if (argc < 1) {
fprintf(stderr, "insertion(): requires a list of numbers\n");
exit(1);
} else if (argc - 1 > INT_MAX) {
fprintf(stderr, "insertion(): requires a list of numbers less than INT_MAX\n");
exit(1);
}
int ints[argc - 1];
for (int i = 1; i < argc; i++) {
char ci = *argv[i];
int i = ci - '0';
ints[i - 1] = i;
printf("%d\n", ints[i - 1]);
}
for (int j = 0; j < argc - 1; j++) {
printf("%d\n", ints[j]);
}
return 0;
}
产生:
3
5
6
9
random stack stuff
random stack stuff
random stack stuff
random stack stuff
这里一定有一个我缺少的概念吗? 编辑:工作解决方案感谢@tilz0R,@dbush
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main(int argc, char **argv) {
if (argc < 1) {
fprintf(stderr, "insertion(): requires a list of numbers\n");
exit(1);
} else if (argc - 1 > INT_MAX) {
fprintf(stderr, "insertion(): requires a list of numbers less than INT_MAX\n");
exit(1);
}
int ints[argc - 1];
int k;
for (int i = 1; i < argc; i++) {
char ci = *argv[i];
k = ci - '0';
ints[i - 1] = k;
printf("%d\n", ints[i - 1]);
}
for (int j = 0; j < argc - 1; j++) {
printf("%d\n", ints[j]);
}
return 0;
}
最佳答案
在不同的范围内,第一个 for
中有两次 int i;
。
for (int i = 1; i < argc; i++) {
char ci = *argv[i];
int i = ci - '0'; // <--- this is problematic
ints[i - 1] = i; // <--- this is problematic
printf("%d\n", ints[i - 1]);
}
更好
for (int i = 1; i < argc; i++) {
char ci = *argv[i];
int tmp = ci - '0';
ints[i - 1] = tmp;
printf("%d\n", ints[i - 1]);
}
关于c - 堆栈数组变量不一致 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54507814/