我是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);
}
答案 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”变量。