C的字符串与数组问题请教

C语言 码拜 10年前 (2015-05-11) 873次浏览 0个评论
 
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>

int main()
{
    int fd;
    int count1,count2;
    char buffer[100];

    fd = open("data",O_RDWR);
    printf("fd is %d\n",fd);
    count1 = read(fd,buffer,100);
    printf("buffer is %s\n length is %d\n",buffer,count1);
    count2 = read(fd,buffer,100);
    printf("buffer is %s\n length is %d\n",buffer,count2);
}

为什么我把char buffer[100]改为char *buffer就读取失败了 ?read 的返回结果是-1。

20分
都没有分配内存,往哪里读入呢?
引用 1 楼 zhangxiangDavaid 的回复:

都没有分配内存,往哪里读入呢?

 意思是必须用malloc分配一块空间才行是吧。 
我试过 char *buffer;  buffer = malloc(100* sizeof(char)); 确实可以。谢谢。另外请教是不是我们给char *buffer = “test”这么赋值的时候 会自动分配空间是吧。我之前 的char*buffer是没有分配空间的。

5分
没地方存。。。
引用 2 楼 u011076569 的回复:
Quote: 引用 1 楼 zhangxiangDavaid 的回复:

都没有分配内存,往哪里读入呢?

 意思是必须用malloc分配一块空间才行是吧。 
我试过 char *buffer;  buffer = malloc(100* sizeof(char)); 确实可以。谢谢。另外请教是不是我们给char *buffer = “test”这么赋值的时候 会自动分配空间是吧。我之前 的char*buffer是没有分配空间的。

char *buffer = “test”
这并不是自动分配空间,而是指向一个已存在的空间,”test”在常量区

5分
#pragma comment(linker,”/SECTION:.rdata,RW”)
//加这句可以让常量区可写,后果自负!
5分
char *str;只是定义了一个指针,没有指向可用的内存,而char str[100]是定义了一个字符数组,长度为100,本身就是一块可用的内存。
5分
楼上各位大哥已说出原委,,,,char *只分配了自己这个指针数据类型的4个字节的内存,而字符数组是真真正正的在内存中开辟了一块用于存字符的空间。
谢谢楼上 各位的解答。看来我对这个存储空间没怎么考虑,以为有个地址就行了。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C的字符串与数组问题请教
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!