C программирование локальных указателей символов - PullRequest
1 голос
/ 25 февраля 2012

У меня есть функция, которая возвращает первые 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] != '\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;
}

Ответы [ 2 ]

3 голосов
/ 25 февраля 2012

Вы передадите аргумент, который является указателем на указатель на 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 голосов
/ 25 февраля 2012

Существуют библиотечные функции, которые помогут вам 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...