在c中搜索字符串的子字符串,然后从中生成新字符串
C并不能让这变得容易。我到处找,什么也没找到 我需要在C字符串中搜索以“Sample:”开头的子字符串,然后创建一个新的C字符串,该字符串由该字符串之后的所有字符组成,直到第一个换行符 在C++中,我可以在心跳的时候这样做。一个更有经验的C程序员能给我指路吗 我相信我可以通过手写来实现这一点,但肯定有一些内置函数可以提供帮助?作为您的朋友,请记住在完成后释放输出:在c中搜索字符串的子字符串,然后从中生成新字符串,c,string,c-strings,C,String,C Strings,C并不能让这变得容易。我到处找,什么也没找到 我需要在C字符串中搜索以“Sample:”开头的子字符串,然后创建一个新的C字符串,该字符串由该字符串之后的所有字符组成,直到第一个换行符 在C++中,我可以在心跳的时候这样做。一个更有经验的C程序员能给我指路吗 我相信我可以通过手写来实现这一点,但肯定有一些内置函数可以提供帮助?作为您的朋友,请记住在完成后释放输出: const char *input = "Hello Sample: This is a test\nTest"; const c
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调用就不难了。查找strstr(),也许还有strchr()。顺便说一句:我可以建议你彻底研究std库中的函数。函数不多,但当你需要它们时,你可能会记得它们的名字。为什么我得到了-1?出于好奇…对我来说似乎是一个合理的问题,可能是因为你抱怨并且没有表现出任何努力。不确定应该表现出什么努力,因为问题的重点是学习使用内置C函数,但是谢谢。我不知道你可以减去字符。太棒了。这就是我要找的东西。谢谢。@Aerovistae这与字符串如何作为连续的内存块存储在内存中有关。因此,如果我有一个指向内存索引a的指针,那么该指针和内存块开头之间的区别就是子字符串的长度。@Aerovistae:如果搜索“指针算术”一词,您将找到许多解释和示例。只是别忘了检查对
strstr()的两个调用是否返回空值
然后做适当的事情。@Richard:你在检查!启动
有点晚(如果为NULL,则不能在strstr()
调用中使用它)。