0

我是一名 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);
}
4

2 回答 2

1

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

所以,一旦你的循环

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

完成后,可以添加语句

output[count] = '\0'

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

在上面的下面一行需要修改

property = output; 

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

使用 strdup,语句将如下所示

property = strdup(output); 
于 2012-08-10T06:29:36.063 回答
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)

或者简单地使用已经存在的“输出”变量,方法是在输入的末尾添加一个空终止符。

于 2012-08-10T06:34:44.207 回答