【发布时间】:2015-09-06 20:44:10
【问题描述】:
我在试图弄清楚如何将 char 指针 c 附加到现有的 Struct String 时遇到问题。我希望能够接受这样的输入(考虑一个预定义的结构,其值为“Hello”)append(test,"world") 当我尝试使用strcat 和strcpy 时出现错误,因为结构字符串是不是用于此函数的有效类型。
如何在不使用str 函数的情况下追加?
我目前有代码声明一个结构,并在这种情况下将 stuff 设置为结构内容的值 hello 我输入我的函数并检查该人传递的数据是否不是空值。我创建了一个名为 append 的新 String Struct 和 realloc memory 到前一个“stuff”的新大小加上 *c 的值。我应该使用 for 循环将点 [i] 处的 *c 内容获取到 append 的末尾吗?
#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,... -
这一行:'if(!(c = NULL)){' 不正确,它将 NULL 分配给 c。所以“如果”永远是真的。这是始终将文字放在左侧的(许多)原因之一。 IE。 'if(!(NULL = c)){' 那么编译器会抛出一个错误信息,你就不需要花费宝贵的时间来调试这个问题了。
-
这一行:'b->stuff realloc(strlen(c) + strlen(b->stuff) + 1);'不编译。它在“b->stuff”之后缺少一个“=”。在就运行时问题寻求帮助时,请发布干净编译的代码(包括所有需要的#include 语句、数据定义等)
-
使用 realloc() 时,始终将返回值保存到临时变量中,然后检查 (!=NULL) 临时变量,然后再分配给实际的目标变量。否则,如果 realloc() 失败,它可以做到,那么 1) 原始指针丢失,导致内存泄漏 2) 对该目标变量(现在为 NULL)的任何取消引用都将导致 seg 错误事件