开发者社区> 问答> 正文

在由char数组组成的数组中插入char数组元素

我想将一个字符串插入一个字符串数组中并遇到问题...我不知道是什么原因。

char* OPT[100]; 

void setOpt(char* ele){
    char* beginning = ele;      //start of index option
    int size = sizeOpt(ele);    //length of option
    char result[size];          //our OPTION

    //go to the first character of option
    while(*beginning != 0 && ((*beginning < 'a' || *beginning > 'z') && (*beginning < 'A' || *beginning > 'Z'))){
    ++beginning;
    }

    strncpy(result, beginning, size);       //get OPTION
    int i = 0;                              //insert at index
    while(OPT[i] != NULL){
        ++i;                
    }
    printf("%s\n", OPT[i]); 
    strcpy(OPT[i], result);                 //insert in array of OPTIONS
}

int main(int argc, char* argv[]){
    char* some[] = {"ls" , ".", "-maxdepth=n", "-something=123"};

    setOpt(some[2]);
   setOpt(some[3]);
   return 0;
}

我的输出:

(null) Segmentation fault: 11

展开
收起
kun坤 2019-11-29 11:25:43 639 0
1 条回答
写回答
取消 提交回答
  • 这是问题:
    
    strcpy(OPT[i], result);                 //insert in array of OPTIONS
    您正在尝试复制到NULL指针。您需要为将字符串副本放入OPT分配内存。
    
    OPT[i] = strdup(result);                 //insert in array of OPTIONS
    或者:
    
    OPT[i] = (char*)malloc(strlen(result)+1);
    strcpy(OPT[i], result);
    现在,让我们将整个函数清理为更简洁易读的东西:
    
    int isLetter(char c) {
        return (((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')));
    }
    
    void setOpt(const char* ele) {
    
        const unsigned int maxentries = sizeof(OPT) / sizeof(OPT[0]);
        unsigned int i = 0;
        while (i < maxentries && OPT[i]) {
            i++;
        }
    
        if (i < maxentries)
        {
            const char* result = ele;
            while (*result && !isLetter(*result)) {
                result++;
            }
    
            if (*result) {
                OPT[i] = (char*)malloc(strlen(result) + 1);
                strcpy(OPT[i], result);
            }
        }
    }
    
    2019-11-29 11:25:55
    赞同 展开评论 打赏
问答分类:
Go
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载