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; 
}