首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将指向数组的指针传递给另一个函数C

将指向数组的指针传递给另一个函数C
EN

Stack Overflow用户
提问于 2015-04-16 03:42:29
回答 1查看 467关注 0票数 1

我尝试获取一个最大为2048字节的输入文件,并将其放入layer4中自己的数组中。我还尝试将数组的大小放在数组的spot中,以供以后使用。当layer4完成时,我尝试将指向名为code的数组的指针传递给transmit函数,该函数将该值传递给layer3,并将该数组放入一个结构中。目前,当我将layer4和layer3中指针的地址相互比较时,它们是匹配的。但是,当我在layer3中检查数组中的值时,它们与输入文件中数组的值不匹配。这段代码将成为一个更大项目的一部分。我收到的各种警告位于我的代码的底部:

代码语言:javascript
运行
复制
#include <stdio.h>   
#include <stdlib.h>


main()
{
int *senddata;
senddata = layer4(); // get pointer address of input array
transmit(senddata); //put pointer value into transmit


}

int layer4(){
    FILE *file = fopen("sendtext.txt", "r"); //
    char *code;
    size_t n = 0;
    int c;
    if (file == NULL)
        return NULL; //could not open file

    code = malloc(2048); //allocate memory 

    while ((c = fgetc(file)) != EOF)
    {
    n++;       
    code[n] = (char) c;
    printf("%c", code[n]);
    }
    code[n] = '\0';
    n = n-1;  // for some reason the byte size is +1 for what it should be
    code[0] = n;  

  printf("Check Pointer Address in layer 4: %p \n", code); //test to see pointer address
  printf("Check to see value in pointer:%c \n", code[0]); //check to see if the byte size was placed in the array
  printf("Byte size:%zd\n", n); /// see array size


return code;
}

transmit(int* getdata){  //gets pointer value
int newdata = getdata;
int g = layer3(newdata); //puts pointer into new function
}

layer3(int b){
int x = b;
int w = &x;
char *MSS;
MSS = malloc(60); 


printf("Check to see value in pointer:%c \n", w);


printf("Check Pointer Address in layer 3:%p \n", x); //test to see pointer address

struct l3hdr {  
  char ver;
  char src_ipaddr[16];
  char dest_ipaddr[16];
  char reserved[7];
};

struct l3pdu {
// put array here
struct l3hdr hdr3; 


};
}

输出

代码语言:javascript
运行
复制
Q sadfasd fsa asd fsadf sad f /// This is my input testfile
Check Pointer Address in layer 4: 0xa81250 
Check to see Byte size in array: 
Check to see first input character in array:Q 
Byte size:29
Check to see value in pointer:P 
Check Pointer Address in layer 3:0xa81250   

警告

代码语言:javascript
运行
复制
lab.c:20:9: warning: return makes integer from pointer without a cast [enabled by default]
         return NULL; //could not open file
         ^
lab.c:37:2: warning: format ‘%c’ expects argument of type ‘int’, but argument 2 has type ‘char *’ [-Wformat=]
  printf("Check to see value in pointer:%c \n", code);
  ^
lab.c:43:1: warning: return makes integer from pointer without a cast [enabled by default]
 return code;
 ^


lab.c: In function ‘transmit’:
lab.c:47:15: warning: initialization makes integer from pointer without a cast [enabled by default]
 int newdata = getdata;
               ^


lab.c: In function ‘layer3’:



lab.c:64:9: warning: initialization makes integer from pointer without a cast [enabled by default]
 int w = &x;
         ^


lab.c:72:1: warning: format ‘%p’ expects argument of type ‘void *’, but argument 2 has type ‘int’ [-Wformat=]
 printf("Check Pointer Address in layer 3:%p \n", x); //test to see pointer address
 ^
EN

回答 1

Stack Overflow用户

发布于 2015-04-16 03:58:10

你到处都是指针和整数。这并不总是会造成问题,但充其量也是糟糕的做法。对于您的特定问题,原因可能是:

代码语言:javascript
运行
复制
transmit(int* getdata){  //gets pointer value
    int newdata = getdata;
    int g = layer3(newdata); //puts pointer into new function
}

layer3(int b){
    int x = b;
    int w = &x;

将一个整型指针传递给layer3调用。但是你可以在layer3中获取它的地址。这不是你想要的。同样,int和指针的混合不是这里的根本原因,但确实造成了混乱。你的代码应该是这样的:

代码语言:javascript
运行
复制
transmit(int* getdata){  //gets pointer value
    int g = layer3(getdata); //puts pointer into new function
}

layer3(int *b){
    int *w = b;

也就是说,不要更改指向整数的指针。只需直接传递指针(特别是传递到layer3中)。编译器的警告已经强烈地暗示了这一点。如果您摆脱了所有这些警告,这是您在正确的轨道上的一个好兆头。

更多小贴士:

  1. 你没有为你的函数声明显式的返回类型。声明正确地explicitly.
  2. Format你的代码(一致的间距,等等)总是很好的做法。尤其是在Stackoverflow上发帖时,对你自己来说更是如此。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29659392

复制
相关文章

相似问题

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