为什么当我使用:
char paraula[15];
int longparaula=0;
copia_paraula(paraula, longparaula);
它说longparaula=0? paraula 没关系,包含我输入的字符的值,但 longparaula 始终为 0。如果我不初始化 longparaula,它始终等于一个随机值。它等于数组的经度,不是吗?就好比函数可以修改"paraula"的valueo,但是不能修改longparaula的值...
void copia_paraula(char taula[15], int Longitud){
int i=0;
while ((c!=' ') & (c!='.')){
taula[i]=c;
scanf("%c", &c);
i++;
}
Longitud=i;
}
提前致谢!
最佳答案
C 是按值传递。
这意味着当调用 copia_paraula()
时,Longitud
会收到存储在 longparaula
中的内容的副本。
在 copia_paraula()
中,代码只是修改了 Longitud
,即 longparaula
的副本。这就是 Longitud
不改变其值的原因。
要解决此问题,请通过传递其地址来向下传递对 longparaula
的“引用”,该指针指向存储 longparaula
的位置。
然后将新值写入指针指向的位置:
void copia_paraula(char taula[15], int * pLongitud)
{
int i = 0;
// while ((c != ' ') & (c != '.')) // you do not want to perform a bit-wise "and"-operation
while ((c != ' ') && (c != '.')) // but a logical, && is the logical "and"-operator
{
taula[i] = c;
scanf("%c", &c);
i++;
}
*Longitud = i;
}
这样调用它:
char paraula[15];
int longparaula = 0;
copia_paraula(paraula, &longparaula);
确保代码不会写出 char
数组的边界留作练习。
关于C Action 和变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28658160/