抱歉,如果这个问题被认为是试图采取简单的方法,但我真的认为我只需要澄清一下。我正在尝试使用 malloc 和 free。我以为我理解它们,但我为它们做的作业本身有点令人困惑。
tklist 数组中的每个元素都应该指向一个单独的标记(引号之间或由空格分隔的字符集)。所以,我需要分配空间然后释放它。
我不明白的是什么时候应该释放内存。我试过在各种地方释放它,但没有任何效果。我想我只是不完全理解某些东西,并且在过去的几天里我已经广泛地查找了 malloc 和 free 试图弄清楚。(也许我应该在我的 main 中释放?也许我的 strncpy 是错误的?) 任何帮助将非常感激!
这是函数,它将一个字符数组和一个 char 指针数组作为参数,并返回在第一个参数中找到的标记数作为其答案。该函数应该解析标记并将每个标记依次添加到 tklist 数组中。
int parseCommandLine(char cline[], char *tklist[]){
int i;
int length;
int count = 0; //counts number of tokens
int toklength = 0; //counts the length of each token
length = strlen(cline);
for (i=0; i < length; i++) { //go to first character of each token
if (((cline[i] != ' ' && cline[i-1]==' ') || i == 0)&& cline[i]!= '"') {
while ((cline[i]!=' ')&& (cline[i] != '\0') && (cline[i] != '\r')){
toklength++;
i++;
}
count ++;
//---------------
//tklist[count] = (char *) malloc( toklength +1);
//strncpy(tklist[count], &cline[i], toklength);
// free( (void *)tklist[count] );
//--------------
toklength = 0;
}
//--------------
//free( (void *)tklist[count] );
//--------------
if (cline[i] == '"') {
do {
toklength++;
i++;
if (cline[i] == ' ') {
toklength--;
}
} while (cline[i]!='"');
count++;
//--------------
//tklist[count] = (char *) malloc( toklength +1);
//strncpy(tklist[count], &cline[i], toklength);
//free( (void *)tklist[count] );
//--------------
toklength = 0;
}
//--------------
//free( (void *)tklist[count] );
//--------------
}
cout << count;
return count;
}