Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将字符追加到字符串并返回字符串_C_Arrays_String_Pointers - Fatal编程技术网

C 将字符追加到字符串并返回字符串

C 将字符追加到字符串并返回字符串,c,arrays,string,pointers,C,Arrays,String,Pointers,我试图调用字符串,根据特定条件添加字符,更新最长的字符串,然后返回字符串 我知道,由于我正在更改字符串(通过添加字符),我不能使用const char*指针,因此我必须使用char数组[] 但是我也知道不能返回char数组[],只能返回指针。因此,我对如何更新字符串(作为字符数组[]),然后返回它(作为常量字符*指针)感到困惑 除非行足够大,可以容纳所需的量,否则您将无法以这种方式进行操作 这里最简单的解决方案是将参数放在堆上,因此使用malloc(length\u of\u str)分配它。在

我试图调用
字符串
,根据特定条件添加字符,更新最长的
字符串
,然后返回
字符串

我知道,由于我正在更改
字符串
(通过添加字符),我不能使用
const char*指针
,因此我必须使用
char数组[]

但是我也知道不能返回
char数组[]
,只能返回指针。因此,我对如何更新字符串(作为
字符数组[]
),然后返回它(作为
常量字符*指针
)感到困惑


除非
足够大,可以容纳所需的量,否则您将无法以这种方式进行操作

这里最简单的解决方案是将参数放在堆上,因此使用
malloc(length\u of\u str)
分配它。在
longestWord
中,您可以调用
line=realloc(line,new_length)
,以便获得更多空间来填充字符


返回
longest
不会像在堆栈上那样起作用,一旦您的方法离开,堆栈将被释放。您也可以通过
malloc()
分配
longest
并返回该指针,在这种情况下,您只需在不再需要返回的指针时调用
free()

只需将数组传递给函数,无需返回任何内容:

void longestWord(char line[], char longest[])
                     //       ^^^^^^^^^^^^^^

您的编译器是否在
返回最长的
行上发出警告?为什么不将其作为指针传递给函数?选择从源代码中的较长字符串开始(以便有扩展空间),或者分配它并将指针传递给指针(以便可以在函数中重新分配)。@dasblinkenlight,是的,它确实有一个警告:
与返回的局部变量“longest”相关联的堆栈内存地址
@kris:是的,这意味着您返回的是一个局部变量,当从外部访问时,将导致未定义的行为。
void longestWord(char line[], char longest[])
                     //       ^^^^^^^^^^^^^^