试图解析一个简单的字符串并逐字打印,得到总线错误:10

时间:2012-09-07 21:42:35

标签: c

正如标题所示,这应该很容易。我不明白为什么,但我收到一个总线错误: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]);
}   
}

3 个答案:

答案 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)操作之后清除输入缓冲区。