我想将一个字符串插入一个字符串数组中并遇到问题...我不知道是什么原因。
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
这是问题:
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);
}
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。