【发布时间】:2014-03-13 19:33:19
【问题描述】:
我是 c 编程的新手,我刚刚了解指针和字符串,我知道在使用指针和字符串时,我们必须为我们想要使用动态内存分配声明的字符串分配内存。我想在不使用的情况下计算字符串的长度c函数库strlen()。但是为什么下面的代码没有给出字符串的实际长度,而是当我将*string更改为string[50]时,这意味着我使用数组方式来计算,代码工作正常并给我字符串的实际长度。
这是代码:
#include <stdio.h>
#include <stdlib.h>
int len(char *string);
int main(void){
char *string;
string=(char *)malloc(len(string+1));
puts("enter string:");
fgets(string,sizeof(string),stdin);
printf("length=%d\n",len(string));
return 0;
}
int len(char *string){
int len;
while(*string!='\0'){
string++;
len++;
}
return len-1;
}
这是我运行该代码的时候:
enter string:
programming
length=2
【问题讨论】:
-
因为你从不初始化
len。使用(轻度)优化和 all 合理的警告标志(在 GCC 中,-O -Wall,可能更多)进行编译。它应该告诉你上面的错误。