首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存分配和动态内存分配

内存分配和动态内存分配
EN

Stack Overflow用户
提问于 2014-03-14 03:33:19
回答 1查看 100关注 0票数 0

我是一个新的c编程新手,我只学习了指针和字符串,我知道当使用指针和字符串时,我们必须为我们想要的字符串分配内存,使用动态内存分配声明。我想计算字符串的长度,而不是使用c函数库strlen().but为什么下面的代码没有给出字符串的实际长度,而是当我将*string改为string[50]时,这意味着我使用数组的方式来计算,代码工作得很好,并给出了字符串的实际长度。

代码如下:

代码语言:javascript
复制
#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;
}

这是我运行代码的时候:

代码语言:javascript
复制
enter string:
programming
length=2
EN

回答 1

Stack Overflow用户

发布于 2014-03-14 03:41:32

您的代码描述了鸡和蛋的问题。要计算长度,您需要一个具有已分配空间的指针&要分配空间,您需要计算长度。

  1. In

string=(char *)malloc(len(string+1));

在malloc()中,您正在传递string,这是一个尚未初始化或分配任何内存的指针,这意味着它包含一些垃圾值。然后当你在len()中计算它的长度时,它会取消引用它包含的垃圾地址,令人惊讶的是你在这里没有得到段错误。

  • ,然后你没有在len()函数中初始化len变量,它只是将len包含并返回的垃圾值相加。

我运行了你的代码,由于上面提到的问题,它给了我一个分段故障

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22389062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档