2012-02-25 57 views
1

我有一个函数返回前n个字符,直到达到指定的字符。我想传递一个ptr来设置字符串中的下一个单词;我怎么做到这一点?这是我目前的代码。C编程本地字符指针

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] != '\0' && line[i] != '\n') 
    { 
     i++; 
    } 

    printf("line + i + 1: %c\n", *(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] = '\0'; 

    char* word = strdup(temp); 
    return word; 
} 
+0

'word'驻留在堆栈上,而不是'word'指向的数据。 – Mahesh 2012-02-25 06:04:23

回答

3

你会传递一个论点,即是指针指向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); 
0

有库函数来帮助您strspn()strcspn()来为这类问题非常方便。

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

char *getword(char *src, char parsechar) 
{ 

char *result; 
size_t len; 
char needle[3] = "\n\n" ; 

needle[1] = parsechar; 
len = strcspn(src, needle); 

result = malloc (1+len); 
if (! result) return NULL; 
memcpy(result, str, len); 
result[len] = 0; 
return result; 
}