尝试从另一个char指针分配一个char指针为什么会出现段错误?

问题描述

已编辑:修复了原始的段错误。但是现在我不确定为什么text2只存储NULL

char* text = "some text";    
char* text2 = malloc(sizeof(text2) * MAX_WORD_LEN);

while (*text != '\0'){
      *text2++ = *text;
      if(isspace(*text)){
           while (isspace(*text)){ 
                  *text++; 
           }
      }
      else{ *text++; }
      
}

为什么此段错误?我应该怎么做?

解决方法

您的代码有几个问题。我在下面列出了它:

  1. char* text2 = malloc(sizeof(text2) * MAX_WORD_LEN);是什么意思,sizeof(text2),应该是sizeof(char)
  2. 您要增加text2 pointer,然后如何打印text2,如果不知道text2的开头,则是由于增加了指针{{1 }}只会指向'\ 0'。
  3. while循环中也有问题... text2,您无需检查此处是否到达while (isspace(*text)) ...

好,让我给出正确的代码版本:

*text = '\0' or not

[P.S。]:提醒一下,我已经为您提供了该程序,该程序最后还会处理空格。但是,如果您想要更好的东西,那么您必须处理前面,中间和结尾的空间...如果所有地方...这都可以为您服务...

,

您没有存储空值。但是,由于每次将text2都存储在其中时,就不再有指向原始text2字符串开头的指针。在循环结束时,text2指向刚复制的最后一个字符。

复制text2以便在循环中使用,这样text2将继续指向起点。或者使用数组索引而不是增加指针。

char* text = "some text";    
char* text2 = malloc(MAX_WORD_LEN);
char *p = text2;

while (*text != '\0'){
    *p++ = *text;
    if(isspace(*text)){
        while (isspace(*text)){ 
            *text++; 
        }
    } else{ *text++; } 
}
*p = '\0'; // add null terminator
printf("result: %s\n",text2);

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...