在此 if 语句中我要检查什么?
What do I check for in this if statement?
我正在使用 sscanf 读取用户输入并保存到多个输出。据我了解,如果我有 sscanf(iput, %s %s %s %s, arr[0], arr[1], arr[2], arr[3]) 我最多可以有 4 个项目输入,但不需要 4;这意味着我可以只放两个 arr[2] 和 arr[3] 就没有价值了。但是,我认为我不理解某些东西,因为后来当我检查 arr[2]/arr[3] 的值时它们不为空,当时我认为字符串只是用 \0 初始化的。请查看我的代码并告诉我我猜 if 语句应该检查什么。
printf("Enter a command: ");
char input[20];
char line[5][20];
fgets(input, 20, stdin);
sscanf(input, "%s %s %s %s %s", line[0], line[1], line[2], line[3], line[4]);
....
else {
int status;
if(line[4] != NULL) {
char *args[6];
args[0] = line[0];
args[1] = line[1];
args[2] = line[2];
args[3] = line[3];
args[4] = line[4];
args[5] = NULL;
if ( fork() == 0 ) {
execv( args[0], args ); // child: call execv with the path and the args
}
else {
wait( &status );
}
scanf
将尝试获取您要求的所有内容。你要 5 个,它会尝试得到 5 个。
sscanf(input, "%19s %19s %19s %19s %19s", line[0], line[1], line[2], line[3], line[4]);
如果没有规范,它会占用用户提交的尽可能多的字符,从而导致缓冲区溢出。坏主意。
我会一次接受一个论点,或者把它作为一个整体。
使用 Jerry Jeremiah 所说的评论,我没有将声明更改为指针,而是将 if 语句中的行 [x] 更改为指针并检查 NULL。
我正在使用 sscanf 读取用户输入并保存到多个输出。据我了解,如果我有 sscanf(iput, %s %s %s %s, arr[0], arr[1], arr[2], arr[3]) 我最多可以有 4 个项目输入,但不需要 4;这意味着我可以只放两个 arr[2] 和 arr[3] 就没有价值了。但是,我认为我不理解某些东西,因为后来当我检查 arr[2]/arr[3] 的值时它们不为空,当时我认为字符串只是用 \0 初始化的。请查看我的代码并告诉我我猜 if 语句应该检查什么。
printf("Enter a command: ");
char input[20];
char line[5][20];
fgets(input, 20, stdin);
sscanf(input, "%s %s %s %s %s", line[0], line[1], line[2], line[3], line[4]);
....
else {
int status;
if(line[4] != NULL) {
char *args[6];
args[0] = line[0];
args[1] = line[1];
args[2] = line[2];
args[3] = line[3];
args[4] = line[4];
args[5] = NULL;
if ( fork() == 0 ) {
execv( args[0], args ); // child: call execv with the path and the args
}
else {
wait( &status );
}
scanf
将尝试获取您要求的所有内容。你要 5 个,它会尝试得到 5 个。
sscanf(input, "%19s %19s %19s %19s %19s", line[0], line[1], line[2], line[3], line[4]);
如果没有规范,它会占用用户提交的尽可能多的字符,从而导致缓冲区溢出。坏主意。
我会一次接受一个论点,或者把它作为一个整体。
使用 Jerry Jeremiah 所说的评论,我没有将声明更改为指针,而是将 if 语句中的行 [x] 更改为指针并检查 NULL。