我需要从stdin读取空格分隔的单词,然后使用emalloc函数为每个单词分配内存。
我发现这很令人困惑,这是我到目前为止所写的内容。
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
#define SIZE 100
char* username[100];
int i;
int p;
/* Read words into array */
for(i = 0; i < 100; i++)
{
username[i] = calloc(SIZE, sizeof(char));
scanf("%s",username[i]);
}
/* Print out array */
for (p = 0; p < 100; p++) {
printf("%s", username[p]);
}
return 0;
}
我不确定我是否正确使用scanf读取单词,我很确定我的内存分配不太正确。来自Java,内存分配很难解决。为什么我不包括&amp;在scanf函数中面向用户名[i]?
答案 0 :(得分:1)
您的代码很好,只有几个问题:
你应该释放指针数组指向的内存。
- 醇>
使用scanf()很危险,因为可能会发生缓冲区溢出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (void)
{
#define SIZE 100
char* username[100];
char *nl;
int i;
int p;
/* Read words into array */
for(i = 0; i < 3; i++)
{
username[i] = calloc(SIZE, sizeof(char));
printf("Enter word %d:", i+1);
fgets( username[i], SIZE, stdin );
// Remove newline
if ((nl = strchr(username[i], '\n')))
{
*nl = '\0';
}
}
/* Print out array */
for (p = 0; p < 3; p++) {
printf("[%s]\n", username[p]);
free( username[p] );
}
return 0;
}
输出:
~/src/svn/misc > ./a.out
Enter word 1:One
Enter word 2:Two
Enter word 3:Three
One
Two
Three