gpt4 book ai didi

c - 为什么在C语言中会发生这种情况?指针赋值不兼容

转载 作者:行者123 更新时间:2023-11-30 14:26:34 25 4
gpt4 key购买 nike

Possible Duplicate:
Is array name a pointer in C?
Array Type - Rules for assignment/use as function parameter

这是我为 K&R C 练习编写的代码。任务非常简单,用\和 t 而不是制表符替换 '\t'

下面是代码

char* escape(char s[], char t[]){
int i = 0, j = 0;
for(i = 0; t[i] != '\0'; i++){
switch(t[i]){
case '\t':{
s[j++] = '\\';
s[j++] = 't';
break;
}
default:{
s[j++] = t[i];
break;
}
}
}
s[j] = t[i];
return s;

}


int main(){
char t[10] = "what \t is";
char s[50];
s = escape(s,t);
printf("%s",s);
return 0;
}

它返回一个错误,指出 char[50] 和 char* 之间的类型分配不正确,但数组的名称不应该是指向第一个元素的指针吗?

最佳答案

在 C 语言中,数组不是可写的左值。你不能分配给他们。 在您的代码中,您实际上不需要从函数返回任何内容,因为它会就地更改 s。但如果你真的想:

char *s = malloc(...);
s = escape(s, t);

这意味着您稍后必须释放它等。简而言之,不要从函数中返回任何内容,就可以了。

but isn't the name of the array supposed to be the pointer to the first element

这过于简单化了。问题是,在某些上下文中,数组通常会衰减为指向第一个元素的指针。

关于c - 为什么在C语言中会发生这种情况?指针赋值不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8952017/

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