在显示指针的结果时遇到问题。
我试图显示这个词,并且每次都消除最后一个字符,也就是说,我试图做的是与此相反的
#include <stdio.h>
int main() {
char str[128] = "Some Text";
char *p;
int i =0;
for (p = str; *p ; p++) {
printf(" value => %s \n ",p);
}
return 0;
}
输出
value => Some Text
value => ome Text
value => me Text
value => e Text
value => Text
value => Text
value => ext
value => xt
value => t
我试过这个,但我没有得到它
value => Some Text
value => Some Tex
value => Some Te
value => Some T
value => Some
value => Som
value => So
value => S
答案 0 :(得分:1)
问题的代码通过调整字符串开始的位置(for循环中的p++
)来改变字符串的开头。要更改字符串的结尾,我们通过用NUL(0)字节覆盖最后一个字符来调整字符串结束的位置。我们通过从字符串末尾(i
)向开头移动索引(strlen(str)
)来实现此目的。
#include <stdio.h>
int main() {
char str[128] = "Some Text";
char *p;
int i;
for (i = strlen(str); i>0; i--) {
str[i] = 0;
printf(" value => %s \n ",str);
}
return 0;
}
答案 1 :(得分:1)
您需要做的第一件事是删除格式字符串中换行符之后的空格字符。
printf(" value => %s \n",p);
您需要做的下一件事是继续移动终止空字符。为此,您需要存储指向终止空字符的指针。
以下是您的计划的更新版本:
#include <stdio.h>
#include <string.h>
int main() {
char str[128] = "Some Text";
char *p = str;
char *end = str + strlen(str);
// The *(--end) = '\0' is the crucial part.
// It decrements end so it points to the previous character
// and changes its value to the null character.
for ( ; end > p; *(--end) = '\0')
{
printf(" value => %s \n",p);
}
return 0;
}
你能用典型的“for”和索引放一些例子吗?
不确定
这是比第一个更简化的一个。
for ( ; end > p; --end)
{
*end = '\0';
printf(" value => %s \n",p);
}
这是一个使用“典型”for
循环的方法。
for ( int i = 0; i < len; ++i)
{
p[len-i] = '\0';
printf(" value => %s \n",p);
}
答案 2 :(得分:0)
另一种解决方案,使用一些不同的技术:
#include <stdio.h>
int main() {
char str[128] = "Some Text";
int i = strlen(str) + 1 ;
while( i --> 1 ) {
printf("value => %.*s \n", i, str );
}
return 0;
}