У меня возникла проблема с попыткой выяснить, как добавить указатель char c к существующему Struct String
. Я хочу иметь возможность принимать входные данные как таковые (учитывая предопределенный Struct со значением «Hello») append(test,"world")
Когда я пытаюсь использовать strcat
и strcpy
, я получаю сообщение об ошибке, потому что структура String не является допустимым типом используется с этой функцией.Добавление двух строк без str-функций
Как добавить без использования функций str
?
В настоящее время у меня есть код, который объявляет структуру и задает значение в качестве содержимого содержимого структуры в этом случае. hello Я ввожу свою функцию и проверяю, не являются ли данные, передаваемые человеком, недействительными. Я создаю новый String Struct с именем append и realloc
для нового размера предыдущего «материала» плюс значение * c. Должен ли я использовать цикл for для получения содержимого * c в точке [i] в конце добавления?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <memory.h>
typedef struct strstf {
char * stuff;
size_t length;
} String;
String * append(String * b, const char * c) {
String * append;
if (c != NULL) {
/* creates memory the size of the original string buffer and the added string */
b->stuff realloc(strlen(c) + strlen(b->stuff) + 1);
strcpy(append, b->stuff);
strcat(append, c);
return append;
}
if (append->stuff == NULL) {
free(append);
return NULL;
}
return append;
}
Вы должны выбрать разные имена для функции 'append()' и переменной 'append'. –
'append = (String *) realloc (b-> stuff, ...' ->, например 'b-> stuff = realloc (b-> stuff, ...' – BLUEPIXY
: 'if (! (c = NULL)) {'неверно, он присваивает NULL c, поэтому' if 'всегда будет true. Это одна из (многих) причин всегда размещать литерал слева. IE' if (! (NULL = c)) {'Тогда компилятор поднял бы сообщение об ошибке, и вам не нужно было бы тратить на вас ценное время, отлаживая эту проблему. – user3629249