在 C 中: input[] = fgets(input[],sizeof(input),*pt) 是一个错误?

问题描述 投票:0回答:1

在 C 编程中,当我们为 fgets 函数传递参数 *pointer_for_string、sizeof_string 和 *stream 时,我们不必将函数的返回值写回到之前定义/给出的 *pointer_for_array 中,这是否正确? fgets 的参数。

为什么会是一个错误?

char string_ofsize_ten[10];
string_ofsize_ten = fgets(string_ofsize_ten, 10, stdin);
c fgets
1个回答
1
投票

事实上,如果成功,函数

fgets
会返回传递给它的指针(如果将数组用作参数,它会隐式转换为指向其第一个元素的指针)作为第一个参数。但是您不能将指针分配给数组,因为它是在代码片段中编写的

char string_ofsize_ten[10];
string_ofsize_ten = fgets(string_ofsize_ten, 10, stdin);

数组是不可修改的左值。

再次注意,在调用上面的函数

fgets
时,用作参数的数组被隐式转换为指向其第一个参数的指针。

返回的指针用于检查 fgets 调用是否成功,例如

while ( fgets(string_ofsize_ten, sizeof( string_ofsize_ten ), stdin) !=  NULL )
{
     string_ofsize_ten[ strcspn( string_ofsize_ten, "\n" ) ] = '\0';
     puts( string_ofsize_ten );
}

另一方面,如果您使用的是指向动态分配内存的指针,例如

char *string_ofsize_ten = malloc( 10 );
string_ofsize_ten = fgets(string_ofsize_ten, 10, stdin);

那么如果函数返回空指针,这样的

fgets
调用可能会导致内存泄漏,因为分配的内存地址将由于指针被空值重新分配而丢失。

© www.soinside.com 2019 - 2024. All rights reserved.