gpt4 book ai didi

C 拆分字符串函数在字符串末尾返回\377 而不是\0。为什么?

转载 作者:太空宇宙 更新时间:2023-11-03 23:19:18 27 4
gpt4 key购买 nike

我试图在 C 中实现一个小的 splitStringByString() 函数,这就是我到目前为止的方式:

char* splitStringByString(char* string, char* delimiter){
int i = 0, j = 0, k = 0;
while(*(string + i) != '\0'){
j = i;
while((*(string + j) == *(delimiter + k)) && (*(string + j) != '\0')){
if(*(delimiter + k + 1) == '\0'){
// return string from here.
char result[(strlen(string) - strlen(delimiter) + 1)]; // + 1 for '\0'
i = 0;
j++;
while(*(string + j) != '\0'){
result[i] = *(string + j);
i += 1;
j++;
}
i = (int)strlen(result);
result[i - 1] = '\0';
return result;
}
k++;
j++;
}
i++;
}

return NULL;
}

所以它或多或少起作用;该函数根据需要返回定界符后的字符串,但该字符串的末尾(最后一个字符)始终为\377。我已经找到一些东西说这是一个八进制数左右 ( stackoverflow ),但对我来说不是很清楚。你能帮助我并就我做错了什么给我一些建议吗?

非常感谢! :-)

最佳答案

我不明白你的代码,但按照你在评论中提到的去做

char *splitSstring(char *haystack, char *separator)
{
char *result = (haystack == NULL || separator == NULL || !strlen(haystack) || !strlen(separator)) ? NULL : haystack;

if (result != NULL)
{
result = strstr(haystack, separator);
if (result != NULL) result += strlen(separator);
}
return result;
}

或者如果你想把它放在单独的字符串中

char *splitSstring(char *haystack, char *separator, char *res)
{
char *result = (haystack == NULL || separator == NULL || !strlen(haystack) || !strlen(separator)) ? NULL : haystack;

if (result != NULL)
{
result = strstr(haystack, separator);
if (result != NULL)
{
result = result + strlen(separator);
if(res == NULL) res = malloc(strlen(result) + 1);
if(res != NULL) strcpy(res, result);
result = res;
}
}
return result;
}

您可以为函数提供您自己的缓冲区,或者如果您传递 NULL,它将为您分配。但是你需要记得释放它;

关于C 拆分字符串函数在字符串末尾返回\377 而不是\0。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45599155/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com