所以我很难理解并让我的代码工作。
我有那段代码:
int main(int argc, char *argv[])
{
while(1){
// Buffer containing one sample (left and right, both 16 bit).
int16_t samples[2];
unsigned cbBuffer=sizeof(samples); // size in bytes of
// Read one sample from input
int got=read(STDIN_FILENO, samples, cbBuffer);
if(got<0){
fprintf(stderr, "%s: Read from stdin failed, error=%s.", argv[0], strerror(errno));
exit(1);
}else if(got==0){
break; // end of file
}else if(got!=cbBuffer){
fprintf(stderr, "%s: Did not receive expected number of bytes.\n", argv[0]);
exit(1);
}
// Copy one sample to output
int done=write(STDOUT_FILENO, samples, cbBuffer);
if(done<0){
fprintf(stderr, "%s: Write to stdout failed, error=%s.", argv[0], strerror(errno));
exit(1);
}else if(done!=cbBuffer){
fprintf(stderr, "%s: Could not read requested number of bytes from stream.\n", argv[0]);
}
}
return 0;
}
我在终端上打电话:
./mp3_file_src.sh bn9th_m4.mp3 | ./passthrough > /dev/null
我想修改代码,以便他可以取n个数并处理n个样本(所以我的代码中得到samples[2*n]
)。如果没有给可执行文件赋予参数,则使用默认值。
如果我理解正确,我可以验证argc>2
是否有参数?但是,我似乎无法理解我如何能够在我的代码中获得该论点并将其传递出来。
有什么想法吗?
答案 0 :(得分:1)
只需通过argv[1]
访问它即可。如果它是数字参数,则需要将其从字符串转换为数字,例如:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int default_opt = 5, option = 0;
if ( argc < 2 ) {
printf("You didn't supply an argument, using default.\n");
option = default_opt;
} else {
char * endptr;
option = strtol(argv[1], &endptr, 10);
if ( *endptr ) {
printf("You supplied an invalid argument, exiting.\n");
exit(EXIT_FAILURE);
}
}
printf("Option set to %d.\n", option);
return EXIT_SUCCESS;
}
输出:
paul@MacBook:~/Documents/src/scratch$ ./arg
You didn't supply an argument, using default.
Option set to 5.
paul@MacBook:~/Documents/src/scratch$ ./arg 7
Option set to 7.
paul@MacBook:~/Documents/src/scratch$ ./arg whut
You supplied an invalid argument, exiting.
paul@MacBook:~/Documents/src/scratch$
答案 1 :(得分:0)
argc
是argv
中元素的数量,其中包含为您的程序提供的参数。 argv
(argv[0]
)的第一个元素是可执行文件名,因此argc
始终至少为1.因此,您检查是否argc > 2
以查看是否有任何参数。
请注意,参数始终是字符串,因此要从中提取数字,您需要使用strtol
或类似的。