我的函数获取一个char数组作为输入。如果它包含字符e
,则将其更改为a
并返回新的char数组。这是我的代码:
char echanger(char word[]){
int total = 0;
int i;
char final[5];
for(i=0;i<5;i++){
if(word[i]=='e'){
final[i] == 'a';
}
else{
final[i] == word[i];
}
}
return final;
}
我在main()
函数中调用它:
int main(){
char a[] = "helle";
printf("new string is: %d \n",echanger(a));
}
它给了我这个输出:
new string is: -48
我在这里失踪了什么?
答案 0 :(得分:1)
为什么不修改原始字符串而不是创建新字符串?
void echanger(char word[]){
int i;
int n = strlen(word);
for(i=0;i<n;i++){
if(word[i]=='e'){
word[i] = 'a';
}
}
}
注意: =
是作业。 ==
是比较。
您需要使用%s
中的printf
格式说明符来输出字符串。 %d
会尝试将字符串作为int
读取,它会为您提供奇怪的值。
同样 FWIW char final[5]
不足以容纳C字符串"helle"
。记住终止空字符。
答案 1 :(得分:1)
您正在使用相等(==
)运算符而不是赋值(=
)运算符。将final[i] == 'a'
更改为final[i] = 'a'
。
如果我用更改重写函数,那么它将是 -
char echanger(char word[]){
int total = 0;
int i;
char final[5];
for(i=0;i<5;i++){
if(word[i]=='e'){
final[i] = 'a';
}
else{
final[i] = word[i];
}
}
return final;
}
希望它会有所帮助 非常感谢。
答案 2 :(得分:1)
您的程序有几个错误。假设字符串长度。不允许或写入nul
终止符。没有返回指针。使用==
代表=
。试图返回一个局部变量。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *echanger(char *word) {
int len = strlen(word);
int i;
char *final = malloc(len+1);
for(i=0; i<=len; i++) { // include terminator
if(word[i] == 'e')
final[i] = 'a';
else
final[i] = word[i];
}
return final;
}
int main(){
char a[] = "helle";
char *news;
news = echanger(a);
printf("new string is: %s\n", news);
free(news); // was from malloc
return 0;
}
节目输出:
new string is: halla