当我运行它时,它说大小是 4,而实际上是 6。它在这里这样做:
printf("String Size: %u\n", sizeof some_string.basic_string);
我是 c 内存分配的新手,以前从未使用过 malloc。我使用的 malloc 对吗?
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
typedef struct String String;
struct String {
char *basic_string;
};
String String_New(char basic_string[]) {
String temp;
temp.basic_string = (char *) malloc(sizeof basic_string);
strcpy(temp.basic_string, basic_string);
return temp;
}
void String_Delete(String *string) {
free(string->basic_string);
string->basic_string = NULL;
}
int String_GetSize(String string) {
int i = 0, s = 0;
while (string.basic_string[i] != '\0') {
i++;
s++;
}
return s;
}
int main(int argc, char *argv[]) {
String some_string = String_New("hello");
printf("String Literal: %s\n", some_string.basic_string);
printf("String Size: %u\n", sizeof some_string.basic_string);
printf("String Length: %d\n", String_GetSize(some_string));
String_Delete(&some_string);
if (some_string.basic_string == NULL) {
return 0;
}
return 1;
}
最佳答案
char *basic_string;
是指向一些内存的指针,指针的大小(在 32 位系统上)是 32 位 = 4 字节。 Sizeof 不知道您在此地址保留的内存大小。
通常没有办法获得 malloc 保留的内存大小——尽管您的系统可能有一些专用调试功能来执行此操作。
关于c - 我这样做对吗? - C代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8281370/