如何在不使用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);
}
这个:
void get_middle(char *str_name, char *str_middle, int *num);
应该:
void get_middle(char *str_name, char **str_middle, int *num);
简而言之,您的get_middle只是在函数内部重新分配了指针,而对外部没有任何影响,因此您真正想做的就是在外部更改指针的值,为此,您需要传递地址指向该指针,并更改其值。
当传递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。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。