我正在嘗試撰寫一個為某個字串動態分配記憶體的程式,然后我想在記憶體中存盤同一字串的 5 個不同值,以便以后可以訪問它。我寫的一些代碼是
#include <stdio.h>
#include <inttypes.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
#include <string.h>
int main( int argc, char *argv[] )
{
int c;
int i = 0;
int k = 0;
int d = 43;
char *data = (char*) malloc(5 * 40 * sizeof(int));
char buf[40];
while (i<5){
time_t t = time(NULL);
struct tm tm = *localtime(&t);
//printf("%d-d-d d:d:d ",tm.tm_mon 1, tm.tm_mday,tm.tm_year 1900, tm.tm_hour, tm.tm_min, tm.tm_sec); // 28
//printf("%ld\n",sizeof("%d-d-d d:d:d"));
//printf("%d: %f\n", d, d/58.0 ); // 8
sprintf(buf,"%d-d-d d:d:d %d: %f\n", tm.tm_mon 1, tm.tm_mday,tm.tm_year 1900, tm.tm_hour, tm.tm_min, tm.tm_sec,d, d/58.0);
//printf("%ld\n",sizeof("%d: %f\n"));
if (k < (5*40)){
int j = 0;
while (j<40){
*(data j k) = buf[j];
j ;
}
k =40;
}
printf("%s",data);
i ;
sleep(1);
}
printf("Finished");
// printf("%d",*(data));
}
因此,在回圈的每次迭代中,“buf”變數存盤不同的日期時間,然后我將其復制到分配的記憶體中。所以理論上,我在分配的記憶體中存盤了 5 個不同的日期時間緩沖區。當我繼續編譯這段代碼時,資料只列印一個日期時間,而不是其余的。如果我理解正確,那是因為我只訪問第一個記憶體位置?難道我做錯了什么?如果是這樣,我將如何存盤 5 個不同的日期時間字串然后訪問它們
uj5u.com熱心網友回復:
假設您直到運行時才知道各個字串的長度,那么您將其分配為char* data[5];并將每個分配data[i]給指向malloc(strlen(some_string) 1). 然后strcpy進入這個分配的空間。free()每次通話都需要一個malloc電話。
或者,如果您出于某種奇怪的原因只想動態分配一個尺寸為 5x40 的二維陣列,那么這將是:
char (*data)[40] = malloc( sizeof(char[5][40]) );
...
data[i][j] = some_character;
...
free(data);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/518369.html
標籤:C指针malloc
