我正在尝试编写一个在字符串行中获取子字符串(空格前的第一个字)的方法 ....我的代码:
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)'失败。 中止(核心倾销)
答案 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