如何从一个长字符串中扫描多个字符串并将其存储在char*word[20]中?
buff数组包含一些字符串。例如,如果buff包含“helloworld”。结果应该是searchWord[0]=“hello”,searchWord[1]=“world”。我试图将每个单词从长数组移动到另一个指针数组。但是,我得到seg错误和无效写入。谢谢你的帮助如何从一个长字符串中扫描多个字符串并将其存储在char*word[20]中?,c,C,buff数组包含一些字符串。例如,如果buff包含“helloworld”。结果应该是searchWord[0]=“hello”,searchWord[1]=“world”。我试图将每个单词从长数组移动到另一个指针数组。但是,我得到seg错误和无效写入。谢谢你的帮助 int res, charRead; char *ptr = buff; char *searchWord[20]; int j = 0
int res, charRead;
char *ptr = buff;
char *searchWord[20];
int j = 0;
while(1)
{
res = sscanf(ptr, "%s%n", searchWord[j] ,&charRead);
if(res != 1)
{
break;
}
printf("%s\n", searchWord[j]);
j++;
ptr = ptr + charRead;
}
这是一个已更改的,但是如何初始化它以使其不会引起任何问题
@abhiarora您能指导如何使用malloc在堆中分配空间吗
我已经写了一个小代码来说明做同样事情的三种方法。代码没有得到优化,效率不高,而且我没有释放在堆上动态分配的内存。在这些方法的开头,我跳过了一些必需的检查。我假设您对您的问题陈述有更好的了解,并找出最适合您的应用程序的大部分内容
我已经在我的ubuntu18.04
机器上用gcc
(gcc(ubuntu8.2.0-7ubuntu1)8.2.0)测试并编译了下面的代码
编译命令是gcc test.c-o test-Wall-Wextra
int j = 0;
char searchWord[20][20];
char *ptr;
ptr = strtok(buff, " ");
while(ptr != NULL)
{
strncpy(searchWord[j][], ptr, 20);
j++;
ptr = strtok(NULL, " ");
}
#包括
#包括
#包括
int method1(const char*buffer,char*arrayOfPtr[50],const int MAX_NUM)
{
int ndx=0;
#定义最大尺寸200
字符温度[最大大小+1];
//方法1
而(ndx
以下是每种方法的说明:
方法1:在这个方法中,我一直在使用malloc
动态分配内存。我一直在使用大小为200
的temp
字符数组来保存当前的c字符串。之后,我动态分配所需大小的内存,并使用memcpy
从temp复制字符串。此方法不处理大小超过200的子字符串已馈送到函数的情况
方法2:在这个方法中,我一直在使用中声明的strtok
函数。使用经过良好测试的c标准函数减少了所需的代码行数
方法3:在这个内存中,我分配了一个全局缓冲区来保存字符串,这样我们就不需要分配动态内存了我跳过了此方法开头的一些检查。这种方法有各种局限性。它不能处理子字符串大小超过100
(MAX\u SUBSTRING\u size
)的字符串,也不能处理子字符串大小超过100
(MAX\u NUMBER\u of_SUBSTRING
)的字符串。此外,如果您的特定子字符串只有5个字符(如Hello
),则95个字符的内存已被浪费。所以,这不是一种有效的方法
但是,我得到seg错误和无效写入
我建议您看看编译器的
警告。确保已在IDE中或使用命令行标志启用警告
我学习过像valgrind
和gdb
这样的工具。在调试seg故障代码时,他们对我非常有帮助
@abhiarora您能指导如何使用malloc在堆中分配空间吗
我已经写了一个小代码来说明做同样事情的三种方法。代码没有得到优化,效率不高,而且我没有释放在堆上动态分配的内存。在这些方法的开头,我跳过了一些必需的检查。我假设您对您的问题陈述有更好的了解,并找出最适合您的应用程序的大部分内容
我已经在我的ubuntu18.04
机器上用gcc
(gcc(ubuntu8.2.0-7ubuntu1)8.2.0)测试并编译了下面的代码
编译命令是gcc test.c-o test-Wall-Wextra
int j = 0;
char searchWord[20][20];
char *ptr;
ptr = strtok(buff, " ");
while(ptr != NULL)
{
strncpy(searchWord[j][], ptr, 20);
j++;
ptr = strtok(NULL, " ");
}
#包括
#包括
#包括
int method1(const char*buffer,char*arrayOfPtr[50],const int MAX_NUM)
{
int ndx=0;
#定义最大尺寸200
字符温度[最大大小+1];
//方法1
而(ndx