很长一段时间我没有处理过C中的数组。
所以我需要在char的数组中找到多个字符串的序列 实际上我需要它们来解析一些命令行
示例:
char *myArray=" go where:\"here\" when:\"i dont know ...\";
我需要找出app运行时指定的参数是什么 我做了一些功能,但结果很奇怪
void splitString(char *from ,char start ,char end ,char *into)
{
int size=strlen(from);
for(int i=0;i<size;i++)
{
if(from[i]==start)
{
for(int j=i;j<size;j++){
if(from[j]!=end)
into+=from[j];
else
break;
}
}
break;
}
}
和电话
char *into;
char *from="this is #string# i want to look for ";
splitString(from,'#','#',into);
答案 0 :(得分:1)
我认为在收到数据时你必须终止成字符串。并将j增加到i + 1
void splitString(char *from ,char start ,char end ,char *into)
{
int k = 0;
int size=strlen(from);
for(int i=0;i<size;i++)
{
if(from[i]==start)
{
for(int j=i+1, k = 0;j<size;j++, k++){
if(from[j]!=end)
into[k]=from[j];
else
break;
}
}
break;
}
into[k] = '\0';
}
答案 1 :(得分:0)
您的代码存在三个主要问题。
首先是该行
into+=from[j];
不复制字符,它会增加本地指针。请参阅kTekkie的答案如何解决这个问题。第二个是你没有终止你复制的字符串,这也是kTekkie的答案。
第三个主要问题是你没有为into
变量分配内存,所以当你开始正确复制字符时,你将复制到任何into
点,这将是一个随机记忆位置。这是未定义的行为,很可能会导致程序崩溃。要解决此问题,请将into
创建为类似
char into[SOME_SIZE];
或使用malloc
char *into = malloc(SOME_SIZE);
如果你进行动态分配,请记住free
当你不再需要它时分配的内存。
修改:仔细查看该功能......
除了上面在我的回答中描述的问题之外,您的功能还有一些其他问题。一个是你在外部循环中有一个break
语句,所以它会立即退出循环。
我实际上会这样写:
void splitString(char *from, char start, char end, char *into)
{
/* Really first we make sure the output string can be printed by terminating it */
*into = '\0';
/* First find the `start` character */
while (*from && *from++ != start)
;
/* Now we are either at the end of the string, or found the character */
if (!*from)
return; /* At end of string, character not found */
/* Copy the string while we don't see the `end` character */
while (*from && *from != end)
*into++ = *from++;
/* Now terminate the output string */
*into = '\0';
}
可以看出here。上一个链接还显示了如何调用它。
答案 2 :(得分:-1)
今天的主题:http://www.cplusplus.com/reference/clibrary/cstring/strtok/
/* strtok example */
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] ="- This, a sample string.";
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str," ,.-");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ,.-");
}
return 0;
}