我有一个函数,它返回前n个字符,直到到达指定的字符。我想传递一个ptr,将其设置为字符串中的下一个单词;我该如何做到这一点?这是我当前的代码。
char* extract_word(char* ptrToNext, char* line, char parseChar)
// gets a substring from line till a space is found
// POST: word is returned as the first n characters read until parseChar occurs in line
// FCTVAL == a ptr to the next word in line
{
int i = 0;
while(line[i] != parseChar && line[i] != ' ' && line[i] != 'n')
{
i++;
}
printf("line + i + 1: %cn", *(line + i + 1)); //testing and debugging
ptrToNext = (line + i + 1); // HELP ME WITH THIS! I know when the function returns
// ptrToNext will have a garbage value because local
// variables are declared on the stack
char* temp = malloc(i + 1);
for(int j = 0; j < i; j++)
{
temp[j] = line[j];
}
temp[i+1] = ' ';
char* word = strdup(temp);
return word;
}
您可以传递一个参数,该参数是指向char的指针;然后在函数中,您可以更改指向指针的值。换句话说,
char * line = ...;
char * next;
char * word = extract_word(&next, line, 'q');
在你的职能范围内。。。
// Note that "*" -- we're dereferencing ptrToNext so
// we set the value of the pointed-to pointer.
*ptrToNext = (line + i + 1);
有一些库函数可以帮助您解决strspn()strcspn()这类问题。
#include <stdlib.h>
#include <string.h>
char *getword(char *src, char parsechar)
{
char *result;
size_t len;
char needle[3] = "nn" ;
needle[1] = parsechar;
len = strcspn(src, needle);
result = malloc (1+len);
if (! result) return NULL;
memcpy(result, str, len);
result[len] = 0;
return result;
}