使用C中的结构类型打印字符串

时间:2013-04-28 20:20:30

标签: c struct printf

我正在使用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; 
}   

2 个答案:

答案 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()为你调用的。