2014-10-30 2 views
-1

나는 캐릭터 라인 에 (공간 전에 첫 번째 단어를) 하위 문자열 얻을하는 방법 .... 내 코드를 작성하려고 해요 :C에서 자주 사용하기 위해 char 포인터를 초기화하는 방법은 무엇입니까?

char* getCommand(char* commandLine) 
    { 
    int index = 0; 
    char* command = {0}; 
    command = malloc(1000); 

    printf("%d\n",(int)strlen(command)); 

    printf("%s\n", command); 

    while(commandLine[index]!=' ') 
    { 
     command[index]=commandLine[index]; 
     index++; 
    } 
    return (char *)command; 
    } 


    while(){ 
     printf("%s\n",getCommand(cmd)); // cmd is char cmd[MAX_CMD_LENGTH]; 
    } 

잘 작동하지만 나에게 오류 제공합니다

malloc.c : 2372 : sysmalloc : 어설 션`(old_top == ((mcharptr) ((char *) & (av) -> bins [((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd))))) & & old_size == 0) || ((unsigned long) (old_size)> = (unsigned long) ((__ builtin_offsetof (struct malloc_chunk, fd_nextsize)) + ((2 * (sizeof (size_t)) -1)) & ~ (old_top) -> 크기 & 0x1) & & & ((부호없는 길이) old_end & 페이지 마스크 == 0) '실패했습니다. 변수 명령이 지정되지 않은 값을 가지고 있기 때문에 중단됨 (덤프 코어)

+0

'strlen (NULL)'-> 충돌 가능성이 높습니다 ... – FatalError

+1

많은 문제가 여기에 있습니다. 데이터를 명령에 복사하는 중입니다.이 명령에는 할당 된 저장 영역이 없습니다. 포인터와 메모리 할당에 대한 더 많은 독서를 C에서 할 수 있습니다. – OldProgrammer

+0

죄송합니다. NULL이 없으며 편집했습니다 ... 문제가 있지만 괜찮습니다. –

답변

2

이 문

char* command; 

printf("%d\n",(int)strlen(command)); 

printf("%s\n", command); 

는 아무 의미가 없다.

그리고 argsOffset 과 같은 전역 변수를 사용하는 것은 좋지 않습니다. 또한 무엇을 하려는지 명확하지 않습니다.

머리글 <string.h>에있는 표준 C 함수 strtok을 사용하여 원본 문자열을 단어로 분할 할 수 있다는 점을 고려하십시오. 나는 당신이 필요로하는 무엇을 정확하게 이해 한 경우

당신이 기능을 사용하면 필요 후 새로운 제로 종료 문자열을 반환 할 것을 원하는 경우 출력은

Hello 
Mohamed 
Seif 

입니다 다음

#include <stdio.h> 
#include <ctype.h> 

char * getCommand(char *commandLine) 
{ 
    static char *p; 
    char *q; 

    if (commandLine) p = commandLine; 


    while (isblank(*p)) ++p; 
    q = p; 

    while (*p && !isblank(*p)) ++p; 

    return q; 
} 

int main(void) 
{ 
    char s[] = "Hello Mohamed Seif"; 

    char *p = getCommand(s); 

    while (*p) 
    { 
     while (*p && !isblank(*p)) printf("%c", *p++); 
     puts(""); 

     p = getCommand(NULL); 
    } 

    return 0; 
} 

입니다 그것을 할당하십시오. 그 크기는 p - q + 1

+0

나는 OP가 공간까지 문자열의 첫 부분을 추출하려고한다고 생각합니다. –

+0

나는 commandLine을 strlen() 함수에 넣기를 원한다고 생각한다. – Quest

+0

commandLine 문자열에서 공백 문자 앞에 첫 번째 단어를 얻으려고한다. 문제는 먼저 명령이 길이가 0이고 첫 번째 단어가 올바르게 표시된다는 것입니다. 다음 두 번째 루프가오고 두 번째 입력은 다시 초기화되어야하고 길이는 다시 0이지만 이전 입력 단어가 있습니다. –

관련 문제