为什么printf无法正确显示我的数组?

时间:2013-06-29 17:58:46

标签: c

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

char数组由空字节终止。这就是printf语句的工作原理。它查找空字节以结束char数组。如果你的char *没有空字节,printf会尽可能长时间打印。