正如标题所示,这应该很容易。我不明白为什么,但我收到一个总线错误:10我运行时。
这应该很容易!但我似乎无法解决它......呃。请帮忙。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main() {
char *string[20];
char buffer[256];
int wordCount = 0;
while ((scanf("%s", buffer) != EOF)) {
printf("%s%d\n", buffer, wordCount);
string[wordCount++] = (char *) malloc (strlen(buffer)+1);
strcpy (string[wordCount], buffer);
}
int j;
printf("There are %d words.\n", wordCount+1);
for (j = 0; j < wordCount; j++)
{
printf("%s\n", string[j]);
}
}
答案 0 :(得分:3)
string[wordCount++] = (char *) malloc (strlen(buffer)+1); strcpy (string[wordCount], buffer);
您正在分配给string[wordCount]
,然后您正在递增wordCount
。然后你继续strcpy
到这个新的,未分配的元素,这是非法的。
wordCount
之后增加strcpy
。
答案 1 :(得分:0)
你应该遇到的另一个问题是,如果你读了超过20行,你将进行非法的内存访问,因为你声明了一个有20个位置的char指针数组:
char * string [20];
你应该重新考虑循环:
while((scanf(“%s”,缓冲区)!= EOF))
答案 2 :(得分:0)
你应该检查一下array-(index)-overflow,如:
int main() {
char *string[20];
char buffer[256];
int j, wordCount = 0;
while (wordcount<20 && (scanf("%255s", buffer) == 1)) { /* here */
printf("%s%d\n", buffer, wordCount+1);
strcpy( string[wordCount++] = malloc (strlen(buffer)+1, buffer );
}
printf("There are %d words.\n", wordCount+1);
for (j = 0; j < wordCount; j++)
{
printf("%s\n", string[j]);
}
return 0;
}
请注意,scanf将在所有空格上中断,并且在所有scanf / fgets(stdin)操作之后清除输入缓冲区。