-1

我在使用指针和数组时遇到了一点问题。问题在于我有一个函数,它从原始数组创建一个新数组,从参数传递的句点中选择适当的字符。这是原型:

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[])?
提前致谢。

4

2 回答 2

2

可能get_string_period返回一个char指向局部变量的指针,所以当函数返回时,它实际返回的将指向一个无效的地址。

有时在这种情况下会发生分段错误,而不是输出一些垃圾值。

于 2013-06-29T18:01:41.747 回答
0

char 数组以空字节终止。这就是 printf 语句的工作原理。它寻找空字节来结束 char 数组。如果您的 char * 没有空字节, printf 将尽可能长时间地继续打印。

于 2013-06-29T18:03:06.293 回答