我是C编程语言的新手,确切地说是malloc。因此,我创建了这个程序,从argv中获取参数,并将它们全部放在一个字符串中,用空格分隔(第32行)。但当我运行它时,一切都会好起来,但下面的代码中似乎没有根据需要插入空格。
当我尝试评论时,第28:buffer[t] = argv[str][i];
行出现空格。
我还尝试将:malloc(buffSize)
转换为(char*)
,然后将其分配给缓冲区,看看是否有任何变化。但什么都没有。
如果有人能告诉我发生了什么,我会很高兴。提前感谢
#include <stdio.h>
#include <stdlib.h>
int main()
{
int str = 0, i = 0, t = 0, letterCount = 0, buffSize;
char *buffer;
char *argv[] = {"hello", "me", "too"};
int argc = 3;
while (str < argc)
{
while (argv[str][i++])
letterCount++;
str++;
i = 0;
}
buffSize = letterCount + argc + 1;
str = 0;
buffer = (char*) malloc(buffSize);
if (!buffer)
return (NULL);
while (str < argc)
{
while (argv[str][i] != ' ')
{
buffer[t] = argv[str][i];
t++;
i++;
}
buffer[t] = ' ';
str++;
i = 0;
}
printf("%s", buffer);
return (0);
}
实际上,您在问题中没有提到ac
和av
代表什么,所以我从代码中删除了它们,并将它们替换为等效数字。
您正在进行大量详尽的编程,比如不是使用strlen()
和strcat()
之类的函数,而是手动实现它,但无论哪种方式,这都是您的选择。
- 当您将字符
' '
放入新数组中时,这一行中的buffer[t] = ' ';
问题,但实际上并没有增加用于放置字符的索引t
,这就是为什么空格字符总是被下一个字符覆盖的原因,因此,您应该执行buffer[t++] = ' ';
- 最后,您在第
printf("%s", buffer);
行打印,但实际上名为buffer
的变量从未以空字符' '
终止,所以最后您应该执行buffer[t] = ' ';
这就是我在你的代码中编辑的全部内容,但你的代码实际上需要再次重写,这是经过编辑的代码,只有两个修改:
#include <stdio.h>
#include <stdlib.h>
#define NUM_OF_SPACES 3
int main()
{
int str = 0, i = 0, t = 0, letterCount = 0, buffSize;
char *buffer;
char *argv[] = {"hello", "me", "too"};
int argc = 3;
while (str < argc)
{
while (argv[str][i++])
letterCount++;
str++;
i = 0;
}
buffSize = letterCount + NUM_OF_SPACES + 1;
str = 0;
buffer = (char*) malloc(buffSize);
if (!buffer)
return (0);
while (str < argc)
{
while (argv[str][i] != ' ')
{
buffer[t] = argv[str][i];
t++;
i++;
}
buffer[t++] = ' ';
str++;
i = 0;
}
buffer[t] = ' ';
printf("%s", buffer);
return (0);
}
这是输出:
hello me too
但当我运行它时,一切都正常了,但下面的代码中似乎没有根据需要插入空格。
正如评论中所指出的,您不太可能运行问题中提供的代码,因为它不是有效的C.
但是,如果你运行了一个类似的程序,并得到了你描述的结果,那么仔细看看这两段代码:
buffer[t] = argv[str][i]; t++; i++;
和
buffer[t] = ' '; str++; i = 0;
您看到这些之间解释问题的重要区别了吗?前者做了什么,而后者做不到?你有没有注意到,虽然你的程序不在单词之间打印空格,但它(我希望)会在最后一个单词后面打印一个空格?
这并不是代码的唯一问题,但一定要在那里寻找直接问题的答案。