2012-08-10 132 views
0

我是一名Android和Java開發人員,對C語言不太熟悉。以及你知道C中沒有字符串類型。我想要的只是獲取字符,將它們放入字符數組中並將這些字符寫爲字符串。我怎樣才能把整個字符串,這是一個字符數組,並將其放入一個變量?這是我的代碼,但它不能正常工作。這是我得到的日誌是:如何用C中的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); 
} 
+1

什麼是錯誤 – Andy 2012-08-10 06:28:26

回答

1

你所缺少的是一個'\0'。 C中的所有字符串只是一個以'\0'結尾的字符序列。

所以,一旦你的循環

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

完成後,你可以,如果你打算返回本地功能外property變量添加

output[count] = '\0' 

下面的修改都需要聲明並且如果output是該函數的局部變量。

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

property = output; 

你應該使用malloc財產分配內存,然後使用strcpy到字符串輸出複製到財產或做strdup由約阿希姆的意見建議。

使用的strdup,該語句將像下面

property = strdup(output); 
+0

其實'屬性=輸出;'很好,雖然它不復制任何數據,只是創建一個指向存儲在輸出中的數據的指針。 – Lundin 2012-08-10 06:36:15

+0

根據使用情況,可能不需要分配'property'指針。使用'strdup'函數可以輕鬆完成這一步。 – 2012-08-10 06:39:31

+0

是的。就是這個獨立的代碼片段。我的猜測是,他正在分配,所以他可以退回此功能的屬性。無論如何,編輯我的答案。希望它沒事。 – Jay 2012-08-10 06:40:22

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) 

或者乾脆使用通過在輸入末尾添加一個空終止符,「輸出」變量已經就位。

相關問題