在c中搜索一个字符串的子字符串,然后创建一个新的字符串
C不会让这个简单。我看了一眼,什么都没发现。在c中搜索一个字符串的子字符串,然后创建一个新的字符串
我需要在C字符串中搜索以“Sample:”开头的子字符串,然后创建一个新的C字符串,该字符串包含之后的所有字符,直到第一个换行符为止。
在C++中,我可以在心跳中做到这一点。一个更有经验的C程序员可以告诉我方式吗?
我敢肯定,我可以通过手工写出来做到这一点,但肯定有一些内置的功能可以帮助吗?
strstr()
和strndup()
是你的朋友,只记得释放输出,当你完成:
const char *input = "Hello Sample: This is a test\nTest";
const char *start = strstr(input, "Sample: ");
if (!start)
{
// report error here
}
const char *end = strstr(start, "\n");
if (!end)
{
// you have two options here.
// #1: use pure strdup on start and you have your output
// #2: make this an error, and report it to the user.
}
int length = end - start;
char *output = strndup(start, length);
printf("%s", output); // Prints "Sample: This is a test"
free(output);
这不是太难,如果你知道正确的API调用。
我没意识到你可以减去char * s。棒极了。这是我一直在寻找的东西。谢谢。 – Aerovistae 2012-03-14 21:15:50
@Aeroovistae它与字符串如何作为连续的内存块存储在内存中有关。所以,如果我有一个指向内存索引的指针,那么指针和内存块开始之间的区别就是子串的长度。 – 2012-03-14 21:18:05
是的,非常有意义。再次感谢。 – Aerovistae 2012-03-14 21:18:31
查找strstr(),也许strchr()BTW:我可以建议你彻底研究std libray中的函数。没有很多功能,但是当你需要它们时,你可能会记住它们的名字。 – wildplasser 2012-03-14 21:08:41
我为什么得到-1?出于好奇...似乎对我来说是一个合法的问题 – Aerovistae 2012-03-14 21:09:25
可能是因为你抱怨并没有表现出什么努力。 – wildplasser 2012-03-14 21:10:25