如何在C中创建一个带char数组的字符串?

时间:2012-08-10 06:26:24

标签: c string file pointers

我是Android和Java开发人员,我对C语言不太熟悉。同样你知道C中没有String类型。我想要的是获取字符,将它们放入char数组并将这些字符作为字符串写入。如何获取整个字符串,这是一个字符数组并将其放入变量?这是我的代码,但它无法正常工作。我得到的日志是:

I/        ( 2234): *********PROPERTY = 180000€¾Ü    €¾Ü €¾ 

应该是180000。

int c;
char output[1000];
int count = 0;
char *property;
FILE *file;
file = fopen("/cache/lifetime.txt", "r");
LOGI("****************FILE OPEN*************");
if (file) {
    LOGI("*****************FILE OPENED************");
    while ((c = getc(file)) != EOF) {
        putchar(c);
        output[count] = c;
        ++count;
        LOGI("******C = %c", c);
    }
    property = output;
    LOGI("*********PROPERTY = %s", property);
    fclose(file);
}

2 个答案:

答案 0 :(得分:1)

您缺少的是'\0'。 C中的所有字符串都只是一个以'\0'结尾的字符序列。

所以,一旦你的循环

while ((c = getc(file)) != EOF)

完成后,您可以添加语句

output[count] = '\0'

如果您打算在本地函数之外返回property变量,并且output是函数本地变量,则需要进行以下修改。

在上面的行中需要修改

property = output; 

您应该使用malloc为属性分配内存,然后使用strcpy将输出中的字符串复制到property或按照Joachim在评论中的建议执行strdup

使用strdup,语句如下所示

property = strdup(output); 

答案 1 :(得分:0)

确定在编译时或运行时是否知道字符数,然后静态或动态地分配数组:

char some_property [N+1]; // statically allocate room for N characters + 1 null termination

// or alternatively, dynamic memory allocation:
char* property = malloc (count + 1);

然后将数据复制到新变量中:

memcpy(some_string, output, count); 

some_string[count] = '\0'; // null terminate

...
free(property); // clean up, if you used dynamic memory (and only then)

或者通过在输入的末尾添加一个空终止来简单地使用已经存在的“output”变量。