雖然作業問題在這裡問不太好,但還是想搞清楚到底該怎麼做
以下是我修改作業的程式碼
#include <stdio.h>
#include <stdint.h>
typedef struct _sScore
{
uint8_t number; //下面score的數量
uint8_t *score; //假設上面number=5,score就會有5個elements,score會介於0~9
}sScore;
sScore *score_init(void);
void score_free(sScore *);
int32_t score_set(sScore *s, char *ptr) //s是初始化後的變數,ptr要將s中的score設值
int main()
{
return 0;
}
剛才問題沒問好,重新修改一下。
這隻程式剛開始要先利用score_init配置記憶體空間還要初始化為0
之後會利用score_set看ptr中有幾個數字(假設5個數字),就將number設成5,然後再把s裡面的score設成ptr中那5個數字
ex. ptr = {5,3,4,6,8},那我s當中的number = 5,s當中的score={5,3,4,6,8}
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
typedef struct _sScore {
uint8_t number; //下面score的數量
uint8_t *score; //假設上面number=5,score就會有5個elements,score會介於0~9
} sScore;
sScore *score_init(void);
void score_free(sScore *);
int32_t score_set(sScore *s, char *ptr);
int main(void) {
// 初始化
sScore *s = score_init();
// 設值
char *ptr = "53468";
score_set(s, ptr);
// 釋放記憶體
score_free(s);
return 0;
}
sScore *score_init(void) {
// 配置記憶體空間
sScore *s = (sScore*) calloc(1, sizeof(sScore));
if (s == NULL) {
printf("Failed to allocate memory for sScore\n");
return NULL;
}
// 將數量初始化為 0
s->number = 0;
// 將分數指標初始化為 NULL
s->score = NULL;
return s;
}
void score_free(sScore *s) {
if (s == NULL) {
return;
}
// 釋放分數指標的記憶體
free(s->score);
// 釋放 sScore 結構的記憶體
free(s);
}
int32_t score_set(sScore *s, char *ptr) {
if (s == NULL || ptr == NULL) {
return -1;
}
int32_t count = 0;
// 計算分數的數量
while (*ptr != '\0') {
count++;
ptr++;
}
// 設定分數的數量
s->number = count;
// 釋放原本的分數指標
free(s->score);
// 配置新的分數指標
s->score = (uint8_t*) calloc(s->number, sizeof(uint8_t));
if (s->score == NULL) {
printf("Failed to allocate memory for scores\n");
return -1;
}
// 設定分數
ptr -= count; // 將指標移到最前面
for (int32_t i = 0; i < count; i++) {
s->score[i] = *ptr - '0'; // 轉換成數字
ptr++;
}
return count;
}