gpt4 book ai didi

c - 从类型 'array[256]' 分配给类型 'array *' 时的类型不兼容

转载 作者:行者123 更新时间:2023-12-01 22:38:36 24 4
gpt4 key购买 nike

我对 C 很陌生,所以为了学习它,我试图创建一个输出龙曲线的程序。这是我到目前为止得到的:

#include <stdio.h>
#include <string.h>
#define ebene 5

char str_n[ebene-1];
char tmp[256]; // ="1"; // 1=R, 0=L
char text[256];

int a_index=0;


char switch_middle(char iarray[256]) {
int num=((2^a_index-1)-1)/2+1; // Nummer der Zahlen pro ebene |-1|/2|+1 -> Index des mittleren Buchstaben
if(num>=0) {
iarray[num]='0';
} else {
iarray[0]='\0';
}
}

int main() {
printf("Hauptschleife erreicht");

while(a_index<ebene) {
//snprintf(text, sizeof text, "%s1%s", tmp, switch_middle(tmp));
strcpy(text, tmp);
strcpy(text, "1");
strcpy(text, switch_middle(tmp)); // Error occures here!

//str_n[a_index]=text;
for(long i=sizeof(tmp)/sizeof(tmp[0]); i--; ) {
tmp[i]=text[i];
}
printf("Ebene: %d\n", a_index);
//printf(" Wert: %s", str_n[a_index]);
printf(" Wert: %d\n", text);

a_index++; // für Mathefunktionen
}
}

尝试编译这个给了我一堆警告和一个错误;我在这个问题的标题中提到的那个(从类型“char *”分配给类型“char [256]”时不兼容的类型)。嗯是的。任何帮助将不胜感激(:

*编辑:好的,下面的评论解决了大部分问题;现在只剩下一个警告了,那就是“传递‘strcopy’的参数 2 从没有强制转换的整数生成指针”和“预期的‘const cgar * restrict’但参数类型为‘char’”作为包含的注释string.h。当我尝试运行该程序时,它给我一个内存访问错误。我在上面的代码中标记了这些行。

*编辑²:固定。感谢以下所有人(:

最佳答案

您不能在 C 中分配数组。您有两种选择来实现您想要的效果:要么使用 memcpy()函数(它在标准库中,只是 #include <string.h> ),或者自己编写副本:

for(long i = sizeof(tmp)/sizeof(tmp[0]); i--; ) tmp[i] = text[i];

请注意,我计算了要复制的数据量而不是硬编码 256,以防止将来在您想要更改所涉及数组的大小时出现错误。一般来说,应该不惜一切代价避免固定限制。

编辑:对于复制数组的第三种方法,请参阅 Aarons 评论。


背景资料:

您可能对错误消息的文本感到疑惑,它报告类型不匹配,您试图分配两个相同类型的变量。原因是数组标识符在几乎所有上下文中都会衰减为指向数组第一个元素的指针。这就是为什么您的作业右侧衰减为 char* 的原因而左侧仍然是 char[256] 类型.

关于c - 从类型 'array[256]' 分配给类型 'array *' 时的类型不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19207458/

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