我有一个如下的结构,其中有一个指向名为“length”的函数的指针,该函数将返回 chars 成员的长度。
typedef struct pstring_t {
char * chars;
int (* length)();
} PString;
我有一个函数可以从指向 PString 的指针返回字符的长度:
int length(PString * self) {
return strlen(self->chars);
}
我有一个函数initialize String(),它返回一个指向字符串的指针:
PString * initializeString() {
PString *str;
str->length = &length;
return str;
}
很明显,我在这里的指针做了一些非常错误的事情,因为str->length = &length
line 在我的调试器中导致 EXC_BAD_ACCESS 信号,`return strlen(self->chars) 也是如此。有人对这个问题有任何见解吗?
我特别希望能够让initializeString() 函数返回一个指向PString 的指针,并且让length 函数使用指向PString 的指针作为输入。这只是用 C 语言实现基本的面向对象系统的一个实验,但我没有太多直接处理指针的经验。感谢你给与我的帮助。
分配内存来保存字符。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct PString {
char *chars;
int (*length)(struct PString *self);
} PString;
int length(PString *self) {
return strlen(self->chars);
}
PString *initializeString(int n) {
PString *str = malloc(sizeof(PString));
str->chars = malloc(sizeof(char) * n);
str->length = length;
str->chars[0] = '\0'; //add a null terminator in case the string is used before any other initialization.
return str;
}
int main() {
PString *p = initializeString(30);
strcpy(p->chars, "Hello");
printf("\n%d", p->length(p));
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)