【发布时间】:2018-08-09 14:56:06
【问题描述】:
我正在尝试将字符串拆分为单词。谁能帮我解决如何在不使用strtok 和main 以外的其他功能的情况下实现它?
void main()
{
int i;
int myargc = 1;
char *myargv[256];
char buff[100];
int len = 0;
char string[256];
int j = 0;
printf("Enter text: ");
gets(buff);
for(i = 0; buff[i] != '\0'; i++){
len++;
}
for(i = 0; i < len; i++)
{
if(buff[i]!=' ' && buff[i+1]==' ')
{
myargc++;
}
}
printf("myargc %d\n",myargc);
**for(i = 0; i < len; i++){
if(buff[i] != ' '){
string[j++] = buff[i];
}
if(buff[i] != ' ' && buff[i] == ' '){
string[j++] = '\0';
j = 0;
}
if(buff[i] == '\0'){
break;
}
}**
for(i = 0; i < myargc - 1; i++){
myargv[i] = string;
printf("argv[%d]\t%s\n", i, myargv[i]);
}
}
例如,当我输入“a b c”时,我的输出如下所示:
myargc 3
argv[0] abc
argv[1] abc
argv[2] abc
【问题讨论】:
-
您没有为
myargv[]中的指针分配任何内存或复制任何字符串 - 您只是在分配指针。 -
myargv[]的每个元素都指向内容不断变化的string[]。所以它们都指向同一个东西,最后处理的字符串。 -
@PaulR 将 buff[i] == ' ' 分配给 buff[i] = '\0' 然后执行字符串复制是否正确?
-
听起来您可能需要学习如何使用debugger 来单步执行您的代码。使用好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏差在哪里。如果您要进行任何编程,这是必不可少的工具。进一步阅读:How to debug small programs.