![](/img/trans.png)
[英]Is this is an example of static memory allocation or dynamic memory allocation?
[英]memory allocation and dynamic memory allocation
我是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
您的代碼描述了雞肉和雞蛋的問題。 要計算長度,您需要一個分配了空間的指針,並分配需要計算長度的空間。
在
string=(char *)malloc(len(string+1));
在malloc()中,您傳遞的string
是尚未初始化或尚未分配任何內存的指針,這意味着它包含一些垃圾值。 然后,當您在len()
計算其長度時,它會取消引用其中包含的垃圾地址, 令人驚訝的是,您在這里沒有遇到段錯誤。
然后您沒有在len()
函數中初始化len
變量,它只是添加到len
包含並返回的垃圾值中。
我運行了您的代碼,由於上面提到的問題,它給了我分段錯誤 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.