سؤال

ولدي البنية التي تحتوي على عضو يسمى تشار * النص. بعد لقد خلق كائن من البنية، ثم كيف يمكنني ضبط النص إلى سلسلة؟

هل كانت مفيدة؟

المحلول

إذا البنية الخاصة بك مثل

 struct phenom_struct {
    char * text;
 };

وكنت تحيله

 struct phenom_struct * ps = malloc (sizeof (phenom_struct));

وبعد ذلك بعد التحقق من قيمة ps ليس NULL (صفر)، وهو ما يعني "فشل"، يمكنك تعيين النص إلى سلسلة مثل هذا:

 ps->text = "This is a string";

نصائح أخرى

وعضو لبنية لديك ليست في الحقيقة سلسلة، ولكن المؤشر. يمكنك تعيين المؤشر إلى سلسلة أخرى من قبل

o.text = "Hello World";

ولكن يجب أن نكون حذرين، يجب على سلسلة يعيش على الأقل ما دام الكائن. باستخدام malloc كما هو مبين في إجابات أخرى هو وسيلة ممكنة للقيام بذلك. في كثير من الحالات، هو أكثر من المستحسن استخدام مجموعة شار في البنية. أي بدلا من

struct foobar {
    ...
    char *text;
}

استخدم

struct foobar {
    ...
    char text[MAXLEN];
}

والذي يتطلب من الواضح أن تعرف الحد الأقصى لطول السلسلة.

typedef struct myStruct
{
    char *text;
}*MyStruct;

int main()
{
    int len = 50;
    MyStruct s = (MyStruct)malloc(sizeof MyStruct);
    s->text = (char*)malloc(len * sizeof char);
    strcpy(s->text, "a string whose length is less than len");
}

مثال:

struct Foo {
    char* text;
};

Foo f;
f.text = "something";

// or
f.text = strdup("something"); // create a copy
// use the f.text ...
free(f.text); // free the copy
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top