【发布时间】:2016-02-14 08:56:51
【问题描述】:
我想了解为什么我需要在其中使用 malloc。我的代码的目标是将"]" 和")" 与";" 分开。所以像这样"];" 变成"]" ";" 和");" 变成")" ";"。 ptr 被用作字符串数组。我不记得字符串数组的技术名称。这很有效,但它节省了我很多时间来理解为什么会在未来发生这种情况。
char *ptr[buflen];
for(x = 0; x < n; x++)
{
printf("ptr[x] is %s \n", ptr[x]);
cmp_str3 = strcmp(ptr[x], "];");
cmp_str4 = strcmp(ptr[x], ");");
if(cmp_str3 == 0)
{
printf("Match1 \n");
strcpy(str1, ptr[x]);
printf("Match2 \n");
ptr[x][1] = '\0';
printf("Match3 \n");
//printf("ptr[x+1] %c %d \n", ptr[x+1], ptr[x+1]);
//printf("ptr[x+1][0] %c %d \n", ptr[x+1][0], ptr[x+1][0]);
ptr[x+1] = malloc(strlen("foo") + 1);
ptr[x+1][0] = str1[1];
printf("Match4 \n");
ptr[x+1][1] = '\0';
printf("Match5 \n");
n++;
}
if(cmp_str4 == 0)
{
}
}
cmp_str3 = 0;
cmp_str4 = 0;
memset(str1, 0, 15);
memset(str2, 0, 15);
【问题讨论】:
-
所以你是说你写了这段代码,从那时起你就忘记了为什么需要使用 malloc,你现在想弄清楚你写这段代码的时候在想什么?
-
ptr是一个指针数组。尝试取消引用未初始化的指针会导致未定义的行为。 -
这就是为什么你应该注释你的代码,所以你知道你的意图lendemain。
-
哦...........只是没有。
-
在这种情况下,如果您删除这两条注释行以及所有其他多余的
printfs,将会有所帮助。然后你可能会真正看到你的代码在做什么。而malloc(strlen("foo")+1);是写malloc(4)的荒谬方式,尤其是当你只需要malloc(2)时。