我是一个新的c编程新手,我只学习了指针和字符串,我知道当使用指针和字符串时,我们必须为我们想要的字符串分配内存,使用动态内存分配声明。我想计算字符串的长度,而不是使用c函数库strlen().but为什么下面的代码没有给出字符串的实际长度,而是当我将*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发布于 2014-03-14 03:41:32
您的代码描述了鸡和蛋的问题。要计算长度,您需要一个具有已分配空间的指针&要分配空间,您需要计算长度。
string=(char *)malloc(len(string+1));
在malloc()中,您正在传递string,这是一个尚未初始化或分配任何内存的指针,这意味着它包含一些垃圾值。然后当你在len()中计算它的长度时,它会取消引用它包含的垃圾地址,令人惊讶的是你在这里没有得到段错误。
len()函数中初始化len变量,它只是将len包含并返回的垃圾值相加。我运行了你的代码,由于上面提到的问题,它给了我一个分段故障。
https://stackoverflow.com/questions/22389062
复制相似问题