ECWgleiz 2017-06-11 04:39
浏览 506

char字符分割成 二维数组,前提是不知道有多少行和列 按照空格和#分割

void main()
{
char *Result = "系统日期 名称 数量 库存 句柄 保留信息 #20170517 发展 500 500 550030014923 1FFA1208#20170517 发展2 100 100 54923 1ff1F208";

char **split(const char *src, const char *delim);
char **strArray = split(Result, "# ");

printf("%s",strArray[1][3]);

getchar();
}

//分割字符并返回字符数组
char split(const char src, const char *delim)
{
int size_char_p = sizeof(char
);
char **result = (char
)malloc(size_char_p);
char **ptmp = NULL;
char *src_copy;
int index = 0;
int result_size = 1;
int i = 0;
char *p;
if (src == NULL || delim == NULL)
{
*result = strdup("");
return result;
}

//备份源字符串
src_copy = strdup(src);

//开始分隔第一个字符串
p = strtok(src_copy, delim);
printf("%s\n\n\n结束p\n", p);

if (p == NULL || strlen(p) == 0)
{
//释放备份
free(src_copy);
result = strdup("");
return result;
}
//重新申请字符串指针空间
ptmp = (char
*)realloc(result, (++result_size)*size_char_p);

if (ptmp == NULL) {
printf("cannot realloc\n");
free(result);
return NULL;
}
result = ptmp;
*result = strdup(p);
index++;
//printf("%S\n", result);

//重新申请字符串指针的空间

while ((p = strtok(NULL, delim)))
{
if (*p == '\0') {
continue;
}

//重新申请字符串指针
ptmp = (char**)realloc(result, (++result_size)*size_char_p);
if (ptmp == NULL) {
printf("cannot realloc\n");
//无法申请内存,则释放申请的空间
for (i = 0; i<result_size; i++) {
free(result[i]);
}
free(result);
return NULL;
}
result = ptmp;
result[index] = strdup(p);
//printf("%s\n\n\n", p);
printf("%s\n\n\n", result[index]);
index++;

}

//释放备份字符串
free(src_copy);
//把最后一个置为空
result[index] = strdup("");
return result;
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥20 关于#硬件工程#的问题,请各位专家解答!
    • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
    • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
    • ¥30 截图中的mathematics程序转换成matlab
    • ¥15 动力学代码报错,维度不匹配
    • ¥15 Power query添加列问题
    • ¥50 Kubernetes&Fission&Eleasticsearch
    • ¥15 報錯:Person is not mapped,如何解決?
    • ¥15 c++头文件不能识别CDialog
    • ¥15 Excel发现不可读取的内容