如何使用指针而不在函数中使用 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/