2013-03-23 29 views
1

我有一個字符數組LL,4014.84954我發送到一個函數如下例所示:查找尺寸和複印部輸出的char * C

#include <stdio.h> 
#include <math.h> 

void myFunction(char* in_string, char* out_string) { 
    printf("Start_String=%s\n", in_string); 
    int in_size = (int)(sizeof(in_string)); 
    printf("%d\n", in_size); 
    int i = 0; 
    for(i = 0; i <= in_size-ceil(in_size/2); i++) { 
    out_string[i] = in_string[i]; 
    } 
} 

int main(int arg) { 
    char in_string[] = "LL,4014.84954"; 
    char out_string[] = ""; 
    printf("In_String=%s\n", in_string); 
    myFunction(in_string, out_string); 
    printf("Out_String=%s\n", out_string); 
} 

我的問題有兩個部分。

  1. 如何獲得此char數組的長度?這個例子中的int in_size = (int)(sizeof(in_string));給了我8這是指針的大小(long int)。我知道我可以創建一個循環,直到它看到空終止,但有沒有更好的方法?我以前使用char []和sizeof偉大的工程,但現在我轉換爲char *。

  2. 如何將這些字符的一部分寫入out_string。我的例子當前寫入所有字符到out_string

這裏是原始輸出:

In_String=LL,4014.84954 
Start_String=LL,4014.84954 
8 
Out_String=LL,40014.84954 
+0

使用'sizeof()'a *指針*可能不會幫助你的原因。您可能想要查看下面的答案以及[這個問題/答案](http://stackoverflow.com/questions/720077/calculating-size-of-an-array)。 – WhozCraig 2013-03-23 19:21:55

+0

什麼部分的字符?如果它只是從一個設定的偏移量到最後,它非常簡單。 – teppic 2013-03-23 19:29:32

回答

1

(1) 回答問題2:

char out_string[] = ""; 

out_string[]只有一個尺寸。您爲i > 0分配out_string[i] = ...是錯誤的,並導致未定義的錯誤。取而代之的是,你應該聲明out_string[]這樣的:

out_string[] = malloc(strlen(in_string) + 1); 

//          ^extra for \0 char 

(2) 另外@WhozCraig評論是正確的,你真正需要strlen()找到字符串的長度。 sizeof你使用錯誤。

所以更換:

int in_size = (int)(sizeof(in_string)); 

通過

int in_size = strlen(in_string); 

(3) 此外,什麼是in_size-ceil。正如我從你的原始輸出中可以理解的那樣,你不需要這樣的函數和計算。只是for循環替換你:

for(i = 0; i <= in_size-ceil(in_size/2); i++) 

通過

for(i = 0; i < in_size; i++) 

(4) 在最後不要;忘記終止你string out_string,後循環添加此行

out_string[i] = '\0' 
1

關於你的第一個問題,使用strlen()

關於第二個問題,首先您需要確保out_string足夠寬以適應結果。目前,它不是,您的代碼的行爲是未定義的。一旦你解決了這個問題,爲了複製一部分字符串,你需要改變for循環的初始條件和最終條件,而不要忘記NUL終止符。

+0

'strlen'是一個很好的調試實現,沿着字符串走,直到遇到'\ 0'。這是使用'<特殊字符>終止'字符串代替'(長度,緩衝區)'字符串的代價之一,例如pascal。 – dmckee 2013-03-23 19:21:23