我用strrchr得到了一些奇怪的结果。请帮帮我。
下面是我的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char szString[32] = "hello-world-and-everyone";
char* ptemp = NULL;
ptemp = strrchr(szString, '-');
if (ptemp == NULL)
{
printf("Invalid string\n");
return 1;
}
printf("%s\n", szString);
printf("%s\n", ptemp );
*ptemp = 0;
printf("%s\n", szString);
return 0;
}预期结果:
hello-world-and-everyone
-everyone
hello-world-and-everyone实际结果:
hello-world-and-everyone
-everyone
hello-world-and发布于 2014-01-17 11:49:13
实际结果是正确的(这并不令人惊讶,真的)。
输出的前两行符合您的预期,因此我假设您很好地理解它们。下面是最后两行中发生的事情:第一行(赋值)在最后一个破折号的位置以null终止szString:
*ptemp = 0; // Replaces the last dash '-' with '\0'所以字符串变成了
h e l l o - w o r l d - a n d \0 e v e r y o n e \0现在打印它时,printf会找到第一个结束符,并停在那里。这就是为什么您在输出中看到截断的字符串,而不是原始字符串的原因。
发布于 2014-01-17 11:48:38
strrchr返回一个指针,指向szString中-的最后一个匹配项。
这里:
*ptemp = 0; 将它指向的值设置为0 (NULL),替换-。所以,当您打印szString时,它就到此为止了,因为字符串是使用0终止的。
将其更改为:
*ptemp = 65; // ASCII 'A'您的输出将是:
问候-世界和每个人
-everyone
hello-world-andAeveryone
发布于 2014-01-17 11:48:24
strrchr不会分配和复制到新的字符串中。它返回一个指向给定字符所在的现有字符串的指针。所以,当你这样做的时候:
*ptemp = 0;将原始字符串中该位置的字符设置为空(0)。最后的结果是:
hello-world-andhttps://stackoverflow.com/questions/21177434
复制相似问题