我正在尝试拨打String
,根据特定条件添加字符,更新最长String
,然后返回String
。
我知道,因为我正在更改String
(通过添加字符),我无法使用const char* pointer
,因此我必须使用char array[]
。
但我也知道char array[]
不能返回,只是指针。所以我对如何更新字符串(作为char array[]
),然后将其返回(作为const char* pointer
)感到困惑。
const char* longestWord(char line[])
{
int pos = 0;
char longest[250];
char ch = line[pos];
int longestLength = 0;
char current[250];
int currentLength = 0;
if(isalpha(ch) || isdigit(ch))
{
longest[longestLength] = ch;
longest[longestLength + 1] = '\0';
currentLength++;
}
pos++;
}
return longest;
答案 0 :(得分:2)
除非line
足够大以容纳所需的数量,否则您将无法以这种方式执行此操作。
这里最直接的解决方案是让参数在堆上,所以用malloc(length_of_str)
分配它。在longestWord
中,您可以拨打line = realloc(line, new_length)
,以便为自己留出更多空间。
返回longest
将不会像堆栈一样工作,一旦你的方法离开,它将被释放。您也可以通过longest
分配malloc()
并返回该指针,在这种情况下,一旦您不再需要它,您只需要在返回的指针上调用free()
。
答案 1 :(得分:0)
只需将数组传递给函数,您就不需要返回任何内容:
void longestWord(char line[], char longest[])
// ^^^^^^^^^^^^^^