gpt4 book ai didi

c - 从关联指针数组中逐字符读取字符串

转载 作者:行者123 更新时间:2023-11-30 19:03:16 24 4
gpt4 key购买 nike

已解决

我创建一个新的 char *ch malloc(strlen) 并逐个字符循环该字符串。然后我使用 memcpy(ch, &stringpool[index], len) 将其复制回来 当然,之后是 free(ch)。

<小时/>

我希望我的问题标题是正确的。

我有一个字符串池

char **string_pool;

在类似的函数中启动

string_pool = malloc( sizeof(char *) * 1024);

我从标准输入获取字符串并将它们扫描到数组中

scanf("%[^\n]s", &string_pool[index]);

这样我就可以使用 printf 将其打印出来

printf("gets %s\n", &string_pool[index]);

我怎样才能

  • 获取 string_pool[index] 的长度
  • 循环读取 string_pool[index] 一个字符

谢谢

编辑

也许我应该多解释一下,它是一个带有虚拟指令集和类似程序的虚拟机

push 1
read
gets

应该:

  • 将 1 压入堆栈 -> 令 x 为 1
  • 将 stdin 作为字符串读取到 string_pool[x]
  • 将所有字符压入堆栈

函数看起来像

    case GETS: {
int index = popv(); // index is already on top of the stack
int strl = strlen(&string_pool[index]);

printf("gets %s with a length of %d\n", &string_pool[index], strl);
// pseudo code
// push each char as integer on the stack
foreach(char in string_pool[index]) push((int)char);

break;
}

case READ: {
int index = popv();
scanf("%[^\n]s", &string_pool[index]);
break;
}

case WRITE: {
int index = popv();
printf("%s", &string_pool[index]);
break;
}

我的问题是在 GETS 案例中。我想将每个字符作为 int 插入堆栈。

最佳答案

char **string_pool;
string_pool = malloc( sizeof(char *) * 1024);

分配 1024 个指向字符的指针。 ( string_pool 是一个指向字符的指针)每个指针都未初始化,并且指向没有可以使用的有效存储。在可以使用每个指针之前,必须通过分配内存并将起始地址分配给每个指针来使它们指向有效内存(以便每个指针“指向”有效内存)。

要为您读取的每个字符串提供适当的大小和分配,您可以使用 fgets使用足以存储您期望的最长输入的固定缓冲区,或者您可以使用 POSIX getline它将根据需要为输入分配存储空间。使用 fgets 你会做类似的事情:

#define MAXCHR 2048
...

char buffer[MAXCHR];

fputs ("enter string: ", stdout);
if (fgets (buffer, MAXCHR, stdin) == NULL) {
fputs ("(user canceled input.)\n", stderr);
return 1;
}

size_t len = strlen (buffer); /* get the length of input (with '\n') */
if (len && buffer[len - 1] == '\n') /* trim the '\n' from end */
buffer[--len] = 0; /* by overwriting with nul-character */


string_pool[index] = malloc (len + 1); /* allocate storage for buffer */
if (string_pool[index] == NULL) { /* validate allocation */
perror ("maklloc-string_pool[index]"); /* handle error */
return 1; /* or break read loop; */
}
/* copy buffer to string_pool[index], advance index */
memcpy (string_pool[index++], buffer, len + 1);

您通常会在读取循环中执行此操作,仅允许输入 while index < 1024以确保您没有尝试为一个指针分配过多的存储空间。

仔细检查一下,如果有疑问请告诉我。

关于c - 从关联指针数组中逐字符读取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54271430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com