0
我是新的C編程,我只是瞭解指針和字符串,我知道當處理指針和字符串時,我們必須爲我們要使用動態內存分配聲明的字符串分配內存。我想計算字符串的長度,而不使用c函數庫strlen()
。但爲什麼這下面的代碼並沒有給出字符串的實際長度,而是當我將*string
更改爲string[50]
這意味着我使用數組方式來計算,代碼工作正常,並給我字符串的真實長度。內存分配和動態內存分配
此代碼:
#include <stdio.h>
#include <stdlib.h>
int len(char *string);
int main(void){
char *string;
string=(char *)malloc(len(string+1));
puts("enter string:");
fgets(string,sizeof(string),stdin);
printf("length=%d\n",len(string));
return 0;
}
int len(char *string){
int len;
while(*string!='\0'){
string++;
len++;
}
return len-1;
}
這是當我運行代碼:
enter string:
programming
length=2
因爲你永遠不會初始化'len'。編譯(溫和)優化和*所有*合理的警告標誌(在GCC中,'-O-Wall',可能多一點)。它應該告訴你有關上面的錯誤。 – vonbrand