【发布时间】:2019-09-23 03:16:47
【问题描述】:
作为计算机科学作业,我被要求制作一个使用下面这段代码的算法。问题是,Name 结构中的字符串被存储为指针,所以当我得到下一个输入时,所有字符串都是相同的,这会破坏我完整代码的功能。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DEFAULT_CAP 5
#define SUCCESS 1
#define FAILURE 0
#define MAX_LINES 100000
typedef struct Name
{
char *string;
} Name;
Name *initializeName(char *inputedName)
{
Name *name = calloc(1, sizeof(Name));
if (name != NULL)
{
name->string = inputedName;
}
return name;
}
void printName(Name *name){
printf("Name -> %s\n", name->string);
}
int main() {
Name **name;
for(int i=0; i< 3; i++) {
char string[100];
scanf("%s", string);
name[i] = initializeName(string);
for(int j = 0; j<=i;j++) {
printName(name[i]);
}
}
return 0;
}
这是一个测试代码,其中提到了损坏的功能。它扫描字符串并将其存储在名称中,并将名称放入名称数组中。
如何让 Name->string 存储为字符串?
【问题讨论】:
-
不要只复制指针(
name->string = inputedName);分配新的存储空间并复制字符串内容。 -
@n.m.我无法用引用的问题解决问题。尽管它们表面上可能相关,但我相信它们会处理不同的情况。
标签: c string memory-management struct