在struct中处理字符串

时间:2013-06-14 08:16:07

标签: c string struct char

我的程序必须有一个带字符串的结构,比如

typedef struct _Node {

 char file[MAX];

//other stuff...

} Node;

Node *myPointer;

所以,在其他函数中,我需要从用户读取一个字符串并传递给我的"文件"结构中的变量,如下所示:

char input[MAX];
scanf("%s", input);
(*myPointer).file = input;

问题是用户字符串的大小是可变的,它不会编译......我该怎么办?

//对不起我的英文

9 个答案:

答案 0 :(得分:3)

这是一个C ++解决方案:

#include <string>
#include <iostream>

struct Node {
 std:string file;
};

然后

Node node;
std::getline(std::cin, node.file);

答案 1 :(得分:2)

你应该这样做:

scanf("%s", (*myPointer).file);

您无需再次复制缓冲区。

答案 2 :(得分:1)

(*myPointer).file = input;

仅使成员文件指向与输入相同的地址。如果要将输入内容复制到myPointer-&gt;文件中,则必须使用strcpy或strncpy。此外,您需要确保您的字符串为空终止。

memset(myPointer->file, 0, MAX);
strncpy(myPointer->file, input, MAX-1);

以上是一种通用的,因为在输入字符串中可以是任何以null结尾的字符串。如果你需要直接从用户输入获取字符串,nouney的答案是最简单的。

答案 3 :(得分:0)

如果这是C ++,请使用std::string。如果这是C,则直接在(*myPointer).file

中读取用户输入

答案 4 :(得分:0)

你可以尝试一下:

    gets(input);
    strcpy(mypointer->file, input);

答案 5 :(得分:0)

您正在使用typedef声明一种类型的结构,然后您创建了指向该类型的指针,但未创建对象。 那么当你没有记忆时,你想把你的数据放在哪里。

首先为对象分配内存。

输入后使用strcpy()

答案 6 :(得分:0)

那是因为结构中的变量文件是一个静态数组地址(与char array []相同),当定义结构并分配内存时。因此无法为其分配新的字符串数组地址。因此,您可以通过以下方式修改代码:

1.当nouney回答,scanf("%s", (*myPointer).file);

2.使用strcpy函数将数组输入复制到myPointer.file数组

3.使用下面的内容重新定义你的结构:

typedef struct _Node {

 char *file;

//other stuff...

} Node;

Node *myPointer;

然后分配输入使用malloc函数的内存,例如:

input = (char *)malloc(sizeof(char) * MAX);
scanf("%s", input);
myPointer->file = input;

完成后不要忘记释放数组文件。

答案 7 :(得分:0)

如果你只想用%s扫描一个字符串,我建议你使用stdin的fgets,它可以限制最大长度。

如果要从用户输入中扫描更复杂的格式,可以使用fgets读取限制长度字符串,然后使用sscanf来获取所需内容。

直接使用scanf可能会导致潜在的安全问题,在C中执行任何字符串缓冲操作时要小心。

答案 8 :(得分:0)

更简单:

scanf("%s", myPointer->file);

这是字符串的安全应对:

strncpy(myPointer->file, input, MAX);
myPointer->file[MAX - 1] = 0;