使用指针和数组时遇到一些问题。麻烦在于我有一个函数,它从原始数组创建一个新数组,从一个参数传递的一个时期中选择适当的字符。这是原型:
char *get_string_period(char chain[], uint8_t period);
我已经使用了一个指向我要返回的数组的指针,因为我无法返回我自己的新数组。所以我将main.c中的指针保存到变量中,然后执行printf:
char *ptr = get_string_period(chain, period);
printf(“The string of the new array is %s”, ptr);`
但printf显示了我生成的数组的简短版本。如果我从我得到的功能打印:
vtvfnstrtmwiapjhqsblzgtiapyogiytzhvuswzsfevpsdbljjgmfwoikuvfmoeotwsjwtgussmbegvlxjutktmkzvvvttwlyeqhuwk
来自main.c:
vtvfnstrtmwiapjhqsblzgti��j
我该如何解决?
还有一个问题:如何重用这个数组将它传递给另一个参数是数组本身的函数(char chain [])?
提前致谢。
答案 0 :(得分:2)
可能get_string_period
返回一个指向局部变量的char
指针,因此当函数返回时,它实际返回的内容将指向一个无效的地址。
有时在这种情况下会发生分段错误,而不是输出一些垃圾值。
答案 1 :(得分:0)
char数组由空字节终止。这就是printf语句的工作原理。它查找空字节以结束char数组。如果你的char *没有空字节,printf会尽可能长时间打印。