将字符分割成字符指针数组
Splitting chars into array of char pointers
我试图将一行80个字符的输入分割成一个数组,其中每个元素指向一串字符。本质上,将字符a[80]转换为字符b[64],其中b[0]指向"Hello",b[1]指向"world!"
基本上,strsep()允许我使用以下代码:
while((cmd->argv[argc++] = strsep(clPtr, WHITESPACE)) != NULL);
我想知道如何修改这段代码:
int parse(char* comm, char** commarray) {
int count = 0;
char word[80] = "";
char ch[2] = {' ', ' '};
if(strlen(comm) == 0) {
commarray[0] = "NULL";
return 0;
}
for(size_t i = 0; i < strlen(comm); i++) {
int c = int(comm[i]);
if(!isspace(c)) {
ch[0] = comm[i];
strcat(word, ch);
if(i == (strlen(comm) - 1)) {
commarray[count] = word;
cout << commarray[count] << endl;
count++;
}
}
else if(isspace(c) && word != "") {
commarray[count] = word;
cout << commarray[count] << endl;
word[0] = ' ';
count++;
}
}
return 1;
}
//main
int main() {
char command[80];
char* args[64];
while(true) {
cout << "order>";
cin.getline(command, 80);
if(strcmp(command, "quit") == 0 || strcmp(command, "exit") == 0) {
break;
}
parse(command, args);
cout << args[0] << endl;
if(strcmp(args[0], "quit") == 0 || strcmp(args[0], "exit") == 0) {
break;
}
/*for(int i = 0; i < 3; i++) {
cout << args[i] << endl;
}*/
}
return 0;
}
main()中的变量args不显示parse()中变量comma所显示的内容。相反,我得到的是胡言乱语。为什么会这样?我认为传递数组是默认的通过引用传递?对于commarray,我得到适当的指向字符串的指针数组(我认为)。对于args,我没有得到任何可用的
指针地狱就是你所在的地方。我可以看到至少有两个基本的问题,但可能还有更多。
1)你在所有的作业中重复使用单词来进行比较。最后,所有的指针都指向同一个单词数组。显然这行不通。
2)当您退出解析函数时,单词数组不再在作用域中,因此它成为无效内存。因此,所有的args数组指针都指向同一块无效(因此是垃圾)内存。
我的建议,停止使用指针,开始使用c++,即std::string类,它的行为将比任何指针更合乎逻辑和直观。
相关文章:
- 指向指向字符数组的指针数组的指针
- 比较字符数组
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- 使用无符号字符数组有效存储内存
- 错误:字符数组的初始值设定项太多
- 对字符数组中的元素执行逐位操作
- C++ 无法在字符数组中使用 for 循环打印字母模式
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- C++ 传递二维字符数组
- 无法在 C++ 中输入字符数组
- 字符数组中的元素数
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 使用字符数组作为 Map 中的键
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- 按顺序声明的字符数组重叠
- 在 C++ 中字符串的大小与字符数组的大小
- 寻找一种更好的方法来表示无符号字符数组
- 如何打印 2D 字符数组C++
- 从字符数组的元素中减去'a'是什么意思
- 我是否不正确地集中了这些字符数组?