gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:39:38 26 4
gpt4 key购买 nike

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

#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;


};
}

输出

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

警告

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
^

最佳答案

你到处都是指针和整数。这并不总是会导致问题,但充其量是一种不好的做法。对于您的具体问题,原因可能是这样的:

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;

您将一个 int 指针传递给 layer3 调用。但是你把它的地址放在 layer3 里面。那不是你想要的。同样,混合使用 int 和指针并不是这里的根本原因,但确实造成了困惑。你的代码应该是这样的:

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

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

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

更多提示:

  1. 您没有为您的函数声明明确的返回类型。始终明确声明这一点的好习惯。
  2. 正确格式化您的代码(一致的间距等)。尤其是在 Stackoverflow 上发帖时,但对您自己来说更是如此。

关于c - 将指向数组的指针传递给另一个函数 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29659392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com