这是我的第一篇文章,所以请耐心等待。我在失学一段时间后回到C写作。我试图将一个整数数组传递给一个函数,该函数将整个数组打印在同一行上(作为更大努力的一部分)。我愚蠢的代码如下:
// main.c
#include <stdio.h>
int main(void) {
int arr[] = {3,4,5,6,7};
int *ptr = arr;
int l = 5;
printarr(arr,l);
return 0;
}
和
// function printarr
#include <stdio.h>
void printarr(char *ptr, int l) {
int k = 0;
for (k = 0; k < l; ++k) {
printf("%d", ptr[k]);
}
}
编译并运行main.c后,得到的输出是:
30004
我觉得我一直在试图弄清楚一个简单的问题。当我在main中迭代并打印数组时,我得到了我期望的输出('34567'),但是当我尝试通过该函数执行它时,它很难过。我怀疑我在滥用指针,但是我不确定。
非常感谢帮助。
感谢。
编辑:看了前两条评论后,我对自己感到羞愧。谢谢大家。哇,哇。答案 0 :(得分:1)
您应该将功能更改为
char
当您将int
传递给它时。正如@Malife指出的那样,您应该使用-Wall
启用编译器警告,以便获得正确的消息。 (可选)使用-Werror
将所有警告设置为错误。
int
和int
有不同的尺寸,char
要大得多。从输出中可以看到4倍大。在将值{ "app_id": "", "proxies": [ { path: "/api", "proxyUrl": "http://localhost:3000" } ] }
视为$authProvider
时,您将以部分方式重复分配$authProvider.twitter({ url: '/api/user/twitter' });
个数字的内存。
答案 1 :(得分:0)
printarr应该期待一个int数组,而不是char数组,所以应该是
void printarr(int *ptr, int l)
在main中,int * ptr = arr;不使用或不需要。
您可能还想在要打印的数组的每个值之间放置一个空格或换行符:
void printarr(char *ptr, int l) {
int k = 0;
for (k = 0; k < l; ++k) {
printf("%d\n", ptr[k]);
}
}
答案 2 :(得分:0)
我认为问题是你在&#34; printarr&#34;中传递一个字符指针。事实上,当你通过&#34; ptr&#34;你有这种情况:00000011 00000000 00000000 00000000 00000100 ....一个char有8位,一个int 32位,并且Ram通常是Little Endian的字节顺序。然后你调用一个传递int的printf,并将字节扩展到32位,这样你打印:3 0 0 0 4.在主&#34; ptr&#34;是一个int,所以你打印int,在这种情况下3 4 5 6 7.你必须更改char * ptr - &gt; int * ptr in&#34; printarr&#34;