gpt4 book ai didi

c - 使用指针函数的参数太少

转载 作者:太空宇宙 更新时间:2023-11-04 05:41:07 24 4
gpt4 key购买 nike

我正在使用 C 来获取终端大小。该函数将在主函数中调用。然后我希望再次运行它以检查终端大小是否已更改或保持不变。这次该函数在另一个函数 run_menu 中被调用。有关其他信息,运行菜单也在主函数中调用。我会在代码中解释更多。错误是“函数‘get_terminal_size’的参数太少”。

//this function is to get the terminal size
//my idea is to use pointer as it will be use again in other function
void get_terminal_size(int *x, int* y)
{
int cols,lines;
assert(x);
assert(y);

#ifdef TIOCGSIZE
ioctl(0,TIOCGSIZE, &ts);
lines = ts.ts_lines;
cols = ts.ts_cols;

#elif defined(TIOCGWINSZ)
struct winsize ts;
ioctl(0,TIOCGWINSZ, &ts);
lines = ts.ws_row;
cols = ts.ws_cols;

#endif
*x = cols;
*y = lines;
}

//this function is to see either the size has changed or not
int change_terminal_size()
{
int new_cols, new_lines;
int x, y;
get_terminal_size(&x, &y);

#ifdef TIOCGSIZE
ioctl(0,TIOCGSIZE, &ts);
new_lines = ts.ts_lines;
new_cols = ts.ts_cols;

#elif defined(TIOCGWINSZ)
struct winsize ts;
ioctl(0,TIOCGWINSZ, &ts);
new_lines = ts.ws_row;
new_cols = ts.ws_cols;

#endif
log_debug("new lines=%d,new cols =%d",new_lines,new_cols);
if((new_cols !=x)||(new_lines != y)){
return 1;
}
return 0;
}

//this function is to run the menu.
static void run_menu()
{
//bla bla bla with other declaration and function
//i will not write it because its not related
while(1){
if (change_terminal_size()){
log_debug("the terminal has change size");
}
//and it will continue with other things

//this is the main function
int main()
{
//again with other declaration and function not related
get_terminal_size();
run_menu();
//continue on with other thing, then return 0
}

如您所见。我调用了“get_terminal_size”函数 2 次。这与我遇到的问题有关吗?据我所知,如果我使用的是指针,那应该没有任何问题。

最佳答案

在这里:

//this is the main function
int main()
{
get_terminal_size(); //<---Right here!
run_menu();
}

您不向 get_terminal_size 传递任何参数。

get_terminal_size 需要用两个参数调用,因此会出现错误“参数太少而无法运行”。

“使用指针”实际上与它没有任何关系,“使用指针”也不允许您从多个地方使用该函数。所有指针(x 和 y)所做的是允许函数更改其范围之外的值。

边栏:您可能应该让 get_terminal_size 返回一个值——在本例中可能是一个带有 X 字段和 Y 字段的结构。通过副作用返回值的函数更难以推理并且更可能包含错误,尽管这个特定示例可能没问题,因为您没有混合输入参数和输出参数。

您的 change_terminal_size() 函数看起来也很粗糙。您在何处跟踪旧终端尺寸以便将其与新终端尺寸进行比较?

关于c - 使用指针函数的参数太少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18996103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com