如何初始化char指针以便在C中频繁使用它?

时间:2014-10-30 14:05:06

标签: c pointers

我正在尝试编写一个在字符串行中获取子字符串(空格前的第一个字)的方法 ....我的代码:

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 ==(((mbinptr)(((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))&〜((2 * (sizeof(size_t))) - 1)))&&((old_top) - > size& 0x1)&&((unsigned long)old_end& pagemask)== 0)'失败。 中止(核心倾销)

1 个答案:

答案 0 :(得分:2)

这些陈述

 char* command;

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

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

没有任何意义,因为变量命令具有未指定的值。

使用像argsOffset这样的全局变量是一个坏主意 还不清楚你想要做什么。

考虑到您可以在标头strtok中使用标准C函数<string.h>将原始字符串拆分为单词。

如果我已正确理解您需要的是以下内容

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

输出

Hello
Mohamed
Seif

如果你希望函数返回一个新的以零结尾的字符串,那么你需要分配它。其大小为p - q + 1