C语言中打印字符数组错误

C语言中打印字符数组错误,c,arrays,pointers,C,Arrays,Pointers,在C语言中尝试这段代码时,我在main方法中看到了垃圾值。我犯了什么错误 我希望我应该在main方法中也使用“%s”,但这似乎是错误的。为什么? #include <stdio.h> #include <stdlib.h> char* minimumMultiple(int num); int main(void) { // your code goes here printf("%s", minimumMultiple(13)); // prints -  *p·ä

在C语言中尝试这段代码时,我在main方法中看到了垃圾值。我犯了什么错误

我希望我应该在main方法中也使用“%s”,但这似乎是错误的。为什么?

#include <stdio.h>
#include <stdlib.h>
char* minimumMultiple(int num);

int main(void) {
// your code goes here
printf("%s", minimumMultiple(13)); // prints  -  *p·ä…d¿“¿Eƒ (GARBAGE) - WHY?
return 0;
}

char* minimumMultiple(int num) {
int chars1s = 1, rem = 1;
while (rem != 0) {
    rem = (rem*10+1) % num;
    chars1s++;
}
char chars[chars1s];
int i;
printf("%d\n", chars1s); // prints 6 
for (i=0;i<chars1s;i++) {
    chars[i] = '1';
}
chars[i] = '\0';
    printf("%s\n",chars); // prints "111111"
return chars;
}
#包括
#包括
字符*最小整数倍数(整数);
内部主(空){
//你的密码在这里
printf(“%s”,minimumMultiple(13));//prints-*p·d……Eƒ(垃圾)-为什么?
返回0;
}
字符*minimumMultiple(整数){
int chars1s=1,rem=1;
while(rem!=0){
rem=(rem*10+1)%num;
chars1s++;
}
字符字符[chars1s];
int i;
printf(“%d\n”,字符数);//打印6

对于(i=0;i您正在返回
minimumMultiple
中区域设置变量
chars
的地址

test_c.c:25:5: warning: function returns address of local variable [-Wreturn-local-addr]
     return chars;
您应该将
chars
定义为指针

 char *chars = malloc(chars1s + 1);

chars
是本地存储,不应在其作用域之外返回以供进一步使用(因为堆栈可以并将覆盖它)
chars[i]='\0';
写入调用未定义行为的数组。通过将
char chars[chars1s];
更改为
chars[chars1s+1]来修复它
我明白了。有什么方法可以解决这个问题?将chars定义为指针,看看更新后的答案现在它是如何解决问题的。我猜它只是将变量存储在堆中?啊,我想早些时候它会进入函数堆栈,调用后就消失了。@prakar是的。你是对的。别忘了释放
malloc
ed内存。a解决此问题的另一种方法是使用全局变量或静态变量。这两种变量都有
static
存储持续时间,并且只要程序存在,就存在。