【发布时间】:2021-09-11 04:10:22
【问题描述】:
我不知道发生了什么
在我的 C++ 程序中,我只想从命令行读取一些参数。
- 变量在 main() 的开头定义:
uint32_t sampling_frequency;
uint32_t samples_per_pixel;
uint32_t total_samples;
uint16_t amplification;
- 在对 argc 进行了一些验证后,我正在阅读它们:
sscanf(argv[3], "%" PRIu32, &sampling_frequency);
sscanf(argv[4], "%" PRIu32, &samples_per_pixel);
sscanf(argv[5], "%" PRIu16, &lification);
- 紧接着,打印获取的值以进行调试:
printf("%s: %" PRIu32 "\n", argv[3], sampling_frequency);
printf("%s: %" PRIu32 "\n", argv[4], samples_per_pixel);
printf("%s: %" PRIu16 "\n", argv[5], amplification);
- 当我运行程序时,大惊喜出现了:
4.b:~/pro/spectr> ./spectr spectr_02.png out.wav 44100 10 2 -9 -8 -5 -4 -2 0 2 3 5
44100: 44100
10: 0
2: 2
如您所见,3 sscanf() 是相同的,但由于某些无法解释的原因,它仅对 argv[4] 无法正常工作。 问题出在 sscanf() 而不是 printf() 因为代码稍后会检查数值并且它确实表现得好像是 0。 我不知道它为什么会这样。
我在 Debian10 amd64 上使用 g++ 进行编译。
【问题讨论】:
-
更陌生,当我以不同的顺序扫描时,我可以让它工作或不工作,但我还是不明白。
-
第二个
sscanf调用的返回值是多少? -
我相信对“放大”的读取影响超过 2 个字节。
-
旁注:由于这是标记为 C++,std::stoul 也可能会有所帮助。例如:
uint32_t sampling_frequency = std::stoul(argv[3]);