C编程:
我试图获取字符串中每个单词的长度,但无论我使用何种方法,都会遇到大量麻烦并出现分段错误。
我原本试图只使用“strlen(pstr)”,但这导致了分段错误。
这是我最近的尝试仍会导致分段错误:
void format_text(char* text)
{
char* pstr;
char copied[1000];
int loop;
int strCnt = 0;
int temp;
int strSize[100];
int strNo[100];
pstr = strtok(text, " ");
while (pstr != NULL)
{
pstr = strtok(NULL, " ");
strcpy(copied, pstr);
strSize[strCnt] = strlen(copied);
strCnt++;
}
printf("the number of strings is: %d\n", strCnt);
for (loop = 0; loop < strCnt; loop++)
{
printf("The length of string %d is %d\n", loop + 1, strSize[loop]);
}
}
如何获取并打印每个单词的长度(令牌)?
答案 0 :(得分:1)
您不需要copied
字符串来获取长度,您只需使用pstr
即可。而且,您需要将strtok()
放在strlen()
之后,否则您将错过第一个单词的长度。
以下是应该起作用的:
pstr = strtok(text, " ");
while (pstr != NULL)
{
strSize[strCnt++] = strlen(pstr);
pstr = strtok(NULL, " ");
}
答案 1 :(得分:0)
当没有其他令牌返回时,strtok()
函数返回pstr == NULL
,但是您的代码没有注意到这一点,而是立即调用strcpy(copied, pstr);
,这将导致您的崩溃。检查NULL并在使用pstr之前立即终止循环。
对于奖励学习点,请在调试器中完成此操作,以确切了解发生的情况。