C 为什么printf没有';无法正确显示我的数组?
我在使用指针和数组时有点问题。问题在于我有一个函数,它从原始数组创建一个新数组,从参数传递的句点中选择合适的字符。以下是原型:C 为什么printf没有';无法正确显示我的数组?,c,C,我在使用指针和数组时有点问题。问题在于我有一个函数,它从原始数组创建一个新数组,从参数传递的句点中选择合适的字符。以下是原型: 我使用了一个指向我想要返回的数组的指针,因为我不能返回新的字符数组本身。因此,我将这个指针保存在main.c中,保存到一个变量中,然后执行printf: 但是printf显示了我生成的数组的一个简短版本。如果我从我得到的函数打印: VTVFNSTRTMWIAPJHQSBLZGTIAPYOGYTZHVUSWZSFEVPSDBLJJGMFWOIKUVMOOTWSJWTG
我使用了一个指向我想要返回的数组的指针,因为我不能返回新的字符数组本身。因此,我将这个指针保存在main.c中,保存到一个变量中,然后执行printf:
但是printf显示了我生成的数组的一个简短版本。如果我从我得到的函数打印:
VTVFNSTRTMWIAPJHQSBLZGTIAPYOGYTZHVUSWZSFEVPSDBLJJGMFWOIKUVMOOTWSJWTGUSMBEGVLXJUTKTMKZVVTTWLYEQHUWK
从main.c:
vtvfnstrtmwiapjhqsblzgti��j
我怎样才能解决它?
还有一个问题:如何重用此数组并将其传递给另一个参数为数组本身(char chain[])的函数?提前谢谢 可能
get\u string\u period
返回指向局部变量的char
指针,因此当函数返回时,它实际返回的内容将指向无效地址
在这种情况下,有时会出现分段错误,而不是输出一些垃圾值 字符数组以空字节终止。printf语句就是这样工作的。它查找空字节以结束字符数组。如果您的char*没有空字节,printf将尽可能长时间地保持打印 返回的指针指向一个局部变量数组,因此当函数返回时它不再有效。您是否正确地在字符串末尾添加了一个
NULL
终止符?请允许我试一试,您正在从get\u string\u period()返回一个局部缓冲区
?在get\u string\u period
中如何声明数组副本?请发布get\u string\u period()
的代码以获得更完整的答案。是的,我认为你是对的。谢谢于浩的回答。很抱歉犯了这么大的错误。@JorgeVicente如果你认为答案有用,你可以接受segfault会更好,而不是更糟。b快速失败,然后产生不正确的输出(即静默失败)。字符串以空字节终止。char
数组可以是,也可以不是printf的“%s”
格式需要指向字符串(第一个字符)的指针。
char *get_string_period(char chain[], uint8_t period);
char *ptr = get_string_period(chain, period);
printf(“The string of the new array is %s”, ptr);`