下方代码的功能是获取输入的字符串的长度,请指出代码哪里存在问题:#include<stdio.h> #include<stdlib.h> #include<string.h> int getLen(char* ss) { int* p = ss; int c = 0; while (*p != '\0') { printf("%c\n",*p); p++; c++; } return c; } int main() { char ss[30] = {0}; gets(ss); int len=getLen(ss); printf("len=%d",len); return 0; }
时间: 2024-01-02 14:03:01 浏览: 65
<stdlibh>通用实用工具-达内内部C语言PPT
这段代码中存在以下问题:
1. 在第5行中,将字符指针p直接赋值为字符串指针ss是错误的,因为字符指针和字符串指针是不同的类型。正确的方式是将字符指针p指向字符串指针ss所指向的字符串的第一个字符,即 `int* p = &ss[0];` 或 `char* p = ss;`。
2. 在第12行中,使用了不安全的函数`gets`,该函数会导致缓冲区溢出漏洞,应该使用更安全的函数`fgets`替代。
3. 在第13行中,输出的字符串长度不包括字符串末尾的'\0',因此应该在返回值前减去1。
修改后的代码如下:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getLen(char* ss) {
char* p = ss;
int c = 0;
while (*p != '\0') {
printf("%c\n", *p);
p++;
c++;
}
return c - 1;
}
int main() {
char ss[30] = {0};
fgets(ss, 30, stdin);
int len = getLen(ss);
printf("len=%d", len);
return 0;
}
```
阅读全文