簡體   English   中英

內存分配和動態內存分配

[英]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

您的代碼描述了雞肉和雞蛋的問題。 要計算長度,您需要一個分配了空間的指針,並分配需要計算長度的空間。

  1. string=(char *)malloc(len(string+1));

    在malloc()中,您傳遞的string是尚未初始化或尚未分配任何內存的指針,這意味着它包含一些垃圾值。 然后,當您在len()計算其長度時,它會取消引用其中包含的垃圾地址, 令人驚訝的是,您在這里沒有遇到段錯誤。

  2. 然后您沒有在len()函數中初始化len變量,它只是添加到len包含並返回的垃圾值中。

我運行了您的代碼,由於上面提到的問題,它給了我分段錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM