gpt4 book ai didi

c - 如何使指针变量在函数中可见

转载 作者:行者123 更新时间:2023-11-30 19:00:43 25 4
gpt4 key购买 nike

如何使用指针而不在函数中使用 return 语句来查看 main 中 str_middle 的内容?我设法用“num”做到这一点,但对“str_middle”却不行。

#include <stdio.h>
#include <string.h>

#define MAX_LENGTH_STR 20
#define MAX_LENGTH_MDL 10

void get_middle(char *str_name, char *str_middle, int *num);

int main(void) {
char str_name_in[MAX_LENGTH_STR + 1]; // Reserved for '\0'
char str_middle_out[MAX_LENGTH_MDL + 1]; // Reserved for '\0'
int val_num = 15;

printf("Enter the string name :");
scanf("%20s", str_name_in);

get_middle(str_name_in, str_middle_out, &val_num);

printf("In main:\n");
printf("Middle string = %s\n", str_middle_out);
printf("Numeric Value = %d\n", val_num);

return 0;
}


void get_middle(char *str_name, char *str_middle, int *num) {
int length_mld = strlen(str_name) / 2;

str_middle = str_name + length_mld;
*num += 1;

printf("in Func:\n");
printf("String = %s\n", str_name);
printf("Middle string = %s\n", str_middle);
printf("Numeric Value = %d\n", *num);

}

最佳答案

当您将 str_middle_out 传递给 get_middle() 时,它具有 main 中输出数组的地址。

因此,在进入 get_middle() 时,str_middle 参数指向输出数组,如果您随后写入它,您将能够看到它在main()中。

但是,get_middle() 有这一行:

str_middle = str_name + length_mld;

现在 str_middle 不再指向 main() 中定义的输出数组。

相反,它指向输入数组。

因此 get_middle() 进行计算并使用用于计算的变量 - str_middle 打印其输出(与 main 中定义的输出数组相反) ()str_middle_out)。

但是由于您的计算已失去与 main() 中定义的输出数组的任何连接,因此该数组仍然为空。这就是为什么当 main() 打印 str_middle_out 时您会看到空输出。

关于c - 如何使指针变量在函数中可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59094530/

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