我正在使用struct类型。我从我自己的档案中读到一句话,上面写着“cerberus守卫着河流风格”。当我尝试打印出来时,只打印字母'c'。我不知道为什么会这样。
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef unsigned int uint;
struct wordType
{
char word[80];
uint count;
};
struct wordType words[10];
int main( void ) {
FILE * inputFile;
char * line = NULL;
size_t len = 0;
ssize_t read;
uint index;
inputFile = fopen( "input.txt", "r");
if( inputFile == NULL )
{
printf( "Error: File could not be opened" );
/*report failure*/
return 1;
}
index = 0;
while( ( read = getline( &line, &len, inputFile ) ) != -1 )
{
printf( "%s\n", line );
*words[index].word = *line;
printf("line = %s\n", (words[index].word) );
}
free( line );
return 0;
}
答案 0 :(得分:2)
*words[index].word = *line;
将line[0]
复制到words[index].word[0]
,这样只有一个字符。如果要复制整行,则必须使用
strcpy(words[index].word, line);
但你应该验证线是否合适,即
strlen(line) < 80
之前。
答案 1 :(得分:0)
这是关于如何分配线对象内存的问题。根据你的代码,你设置了一个char *,但是你永远不会为它分配任何内存。这就是说你的char *只能容纳1个字符,或者更准确的字符数来填充你正在使用的系统中的标准字符。
要解决此问题,您需要在代码中添加malloc()调用,以将字符串的长度分配给char *。
line = (char *)malloc(SizeofString);
此代码将为您的线对象提供正确的大小,以容纳整个字符串,而不只是一个字符。但是,您可能希望将以下内容用作字符串大小以确保平台独立性。
SizeofString = sizeof(char) * numberofCharactersinString;
然后使用strcpy()复制该行的内容。
EDIT :: 由于GetLine()调用的功能,我上面写的内容似乎具有误导性。这是malloc()为你调用的。