【发布时间】:2011-11-26 20:25:16
【问题描述】:
当我运行它时,它说大小是 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;
}
【问题讨论】:
-
s或i中的String_GetSize都是多余的。我会删除s,因为i是索引或循环计数器的更常见(惯用)用法。 -
您似乎正在尝试在 C 中使用面向对象的模式。您不使用 C++(或 C# 或 Java)是否有原因?
-
我不喜欢 java 或 c# 和 idk 为什么我不这样做是 c++
-
不确定我是否理解您的评论。您的意思是“在 C++ 中”吗?
标签: c memory dynamic allocation