gpt4 book ai didi

c - 更新字符串直到在 C 中找到句点

转载 作者:太空宇宙 更新时间:2023-11-04 05:26:24 24 4
gpt4 key购买 nike

在这个函数中,我将接收 char * 单词,例如

person.vet.blah

word.friends.joe

我想提取第一个词。所以对于第一个我想提取

 person 

第二个我要提取

 word

我怎样才能正确地做到这一点?这是我的代码:

char *separate_name(char *machine_name)
{
//iterate until you find period. then return
char absolute_name[1000];
int i;
for (i =0; i < strlen(machine_name); i++)
{
if (machine_name[i] == '.')
absolute_name[i] = machine_name[i];

}


return absolute_name;
}

这只是段错误。任何想法我应该做什么? machine_name 将成为“person.vet.blah”,然后返回 absolute_name,这将是“person”

最佳答案

修复代码

正如其他人所指出的,您不能在定义它的函数之外使用 absolute_name。这是因为当您从函数返回变量时,返回的只是指向数组开头的指针。在函数之外,数组本身不再存在,因此指针无效,如果您尝试取消引用它,则会出现段错误。

您可以使用 malloc 来解决这个问题。不要忘记释放当你使用完你分配的内存。

顺便说一下,除了将循环更改为 while 之外,我还修复了检查(您正在检查 machine_name[i] == '.',与你想要的相反)。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *separate_name(char *machine_name)
{
// allocate memory on the heap
char *absolute_name = malloc(strlen(machine_name)+1);

int i = 0;
while (i < strlen(machine_name) && machine_name[i] != '.') {
absolute_name[i] = machine_name[i];
++i;
}
absolute_name[i] = '\0';

return absolute_name;
}

int main()
{
char name1[] = "person.vet.blah";
char *first1 = separate_name(name1);
if (first1 != NULL) {
printf("%s\n", first1);
free(first1);
}

char name2[] = "word.friends.joe";
char *first2 = separate_name(name2);
if (first2 != NULL) {
printf("%s\n", first2);
free(first2);
}

return 0;
}

更好的选择

strtok 是完成这项工作的完美工具:

#include <stdio.h>
#include <string.h>

char *separate_name(char *machine_name)
{
return strtok(machine_name, ".");
}

int main()
{
char name1[] = "person.vet.blah";
char *first1 = separate_name(name1);
if (first1 != NULL) printf("%s\n", first1);

char name2[] = "word.friends.joe";
char *first2 = separate_name(name2);
if (first2 != NULL) printf("%s\n", first2);

return 0;
}

正如评论中指出的(感谢@John),strtok 修改了传递给它的字符串(它将分隔符 . 替换为 \0 空字节来标记字符串的结尾)。这在这里不是问题,但需要注意。

使用任一程序的输出:

person
word

关于c - 更新字符串直到在 C 中找到句点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25753905/

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