0

我的程序必须有一个带字符串的结构,像这样

typedef struct _Node {

 char file[MAX];

//other stuff...

} Node;

Node *myPointer;

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

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

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

//对不起我的英语不好

4

9 回答 9

3

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

#include <string>
#include <iostream>

struct Node {
 std:string file;
};

然后

Node node;
std::getline(std::cin, node.file);
于 2013-06-14T08:22:29.790 回答
2

你应该做这个 :

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

您无需再次复制缓冲区。

于 2013-06-14T08:18:48.423 回答
1
(*myPointer).file = input;

只使成员文件指向与输入相同的地址。如果要将输入的内容复制到 myPointer->file 中,则必须使用 strcpy 或 strncpy。您还需要确保您的字符串以空值结尾。

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

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

于 2013-06-14T08:26:54.597 回答
0

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

1.正如努尼回答的那样,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;

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

于 2013-06-14T08:28:39.687 回答
0

它更简单:

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

这是字符串的安全处理:

strncpy(myPointer->file, input, MAX);
myPointer->file[MAX - 1] = 0;
于 2013-06-14T08:51:55.913 回答
0

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

于 2013-06-14T08:19:59.573 回答
0

你能试一下吗:

    gets(input);
    strcpy(mypointer->file, input);
于 2013-06-14T08:21:23.090 回答
0

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

首先为对象分配内存。

取输入后使用strcpy()

于 2013-06-14T08:21:56.840 回答
0

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

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

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

于 2013-06-14T08:41:16.410 回答