2 a1163639207 a1163639207 于 2014.12.10 22:15 提问

不管输入什么输出都是256,原本是用来计算字符串长度的

#include
int main()
{int slen(int *p);
int *p;
char s[1000];
p=s;
printf("请输入字符串:");
gets(s);
printf("该字符串长度为:%d",slen(p));
return 0;
}

int slen(int *p)
{int l=0;
for(;*p!='\0';p++)
l++;
return l;
}

5个回答

u012746396
u012746396   2014.12.10 23:06
已采纳

您好,很高兴能为您解答:
(1)您的slen()函数未写出来,估计是有问题,对于字符串测长度,C可以采用内置strlen函数,用法不赘述
(2)您的指针可能有指向错误,而且完全没有必要使用。
(3)由于您从文件读入,建议使用fgets

u012746396
u012746396 回复a1163639207: 说实话,如果硬性要求的话,建议谭浩强的书,指针讲的很好,不过竞赛用不到,而且效率不好→_→
3 年多之前 回复
a1163639207
a1163639207 我知道这样麻烦,但这是题目硬性要求,必须要使用指针当形参的······
3 年多之前 回复
caozhy
caozhy   Ds   Rxr 2014.12.10 22:19

用fgets代替gets

billy0920
billy0920   2014.12.10 22:28

我没看错吧:关键的slen()函数是怎么定义的,你的代码中不给出来,别人肯定不知道是出了什么错误。
看起来是slen()输出了固定的值。

a1163639207
a1163639207 slen()定义有问题?
3 年多之前 回复
eagleyan
eagleyan 大哥,人家slen在哪里,看仔细啊
3 年多之前 回复
91program
91program   Ds   Rxr 2014.12.11 07:51

这个问题的解决思路偶一般是:
(1)先看是否正确获取到输入的字符串,例如:使用 printf 将输入的字符串回显出来。
(2)再看字符串长度计算函数,将 *p 的数值也用 printf 输出。

这样任何位置出来错误,都能及时发现并解决。

CRAZYABOUTYOU
CRAZYABOUTYOU   2014.12.11 11:08

计算字符串长度可以直接用内置函数“strlen()”即可。
而且没有必要非要用指针呀,反而麻烦啦,直接对字符串处理就可以啦,只要读到'\0'就计算前面字符的个数并返回。

int strlen(const char *str)
{
  assert(str != NULL);
  int len = 0;
  while((*str++) != '/0')
len++;
  return len;
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!