1215787625 发表于 2023-12-14 20:36:29

为什么这个程序到了n=1时就会退出

#include<stdio.h>
void name(int n,char *a[]){
        scanf("%s",a);
        printf("\n%s",a);
        printf("\n");
}
int main(){
        char a,*s;
        s = a;
        int n=0,m=3;
        for(n=0;n<m;n++){
                name(n,s);
        }
        return 0;
}

FishC 发表于 2023-12-14 20:36:50

在你的代码中,主要问题是 `s = a;` 这行代码。这行代码试图将指针 `a` 赋值给指针 `s`,但是你并没有为指针 `a` 分配内存空间,所以会导致程序异常退出。

另外,我注意到你使用了一个不推荐的头文件 `#include`,应该改为 `#include <stdio.h>`。

以下是修正后的代码:

#include <stdio.h>

void name(int n, char *a) {
    scanf("%s", a);
    printf("\n%s", a);
    printf("\n");
}

int main() {
    char a; // 为指针 a 分配内存空间
    char* s;
    s = a;
    int n = 0, m = 3;
    for (n = 0; n < m; n++) {
      name(n, s);
    }
    return 0;
}

现在,这个程序将能够循环执行 `name` 函数,并且在输入字符串后打印出来,直到 `n` 达到 `m` 的值。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

sfqxx 发表于 2023-12-14 21:06:55

问题的原因在于`name`函数的第一行`scanf("%s",a)`。这行代码意味着读取一个字符串到数组a的第n个位置。然而,当n等于1时,`a`并没有被初始化。这就意味着`scanf`试图将字符串读入到一个未知的、可能不合法的内存位置,导致程序错误和退出。

在你的示例中,只有`s`被初始化为`a`。但其它的`s`到`s`都没有被初始化,它们的值是不确定的。这就是为什么当n大于0时,program会退出。

如果你想让你的程序正常工作,你需要确保在调用`name`函数之前把指针数组s全部初始化,代码如下:

#include<stdio.h>

void name(int n,char *a[]){
    scanf("%s",a);
    printf("\n%s",a);
    printf("\n");
}

int main(){
    char a,*s;
    int n=0,m=3;
    for(n=0;n<100;n++){
      s = a;
    }
    for(n=0;n<m;n++){
      name(n,s);
    }
    return 0;
}

有用请设置最佳答案{:10_254:}

zhangjinxuan 发表于 2023-12-15 11:50:05

sfqxx 发表于 2023-12-14 21:06
问题的原因在于`name`函数的第一行`scanf("%s",a)`。这行代码意味着读取一个字符串到数组a的第n个位置。 ...

《好GPT》《真GPT》《如GPT》
页: [1]
查看完整版本: 为什么这个程序到了n=1时就会退出