Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从函数更改字符数组_C_Arrays_Function_Char - Fatal编程技术网

C 从函数更改字符数组

C 从函数更改字符数组,c,arrays,function,char,C,Arrays,Function,Char,我当时正在读书,不知道该怎么做 我有一个无法更改的main.c,我得到了一个char数组char fn[MAX]最大值为100。它被传递到函数readFileName(fn)这是获取用户输入以获取新文件名的地方。每次我运行我的函数,我都会得到一个分段错误(核心转储)错误。这就是我的函数的样子。显然我做错了,但我不知道为什么。我需要在某处做一个指针吗?任何帮助都将不胜感激 void readFileName(char fn[]){ printf("Please enter the new

我当时正在读书,不知道该怎么做

我有一个无法更改的main.c,我得到了一个char数组
char fn[MAX]最大值为100。它被传递到函数
readFileName(fn)这是获取用户输入以获取新文件名的地方。每次我运行我的函数,我都会得到一个分段错误(核心转储)错误。这就是我的函数的样子。显然我做错了,但我不知道为什么。我需要在某处做一个指针吗?任何帮助都将不胜感激

void readFileName(char fn[]){
    printf("Please enter the new file that you would like to open\n");
    scanf("%s", fn);

    printf("%s", fn);
}
这是节目的开始

int main(int argc, char *argv[]){
    int month, choice;
    int * temps;
    FILE * fin = NULL;
    char fn[MAX];
    fin = openFile(argc, argv);

    month = readMonth(fin);
    temps = fillArray(month, fin);
            fclose(fin);
            fin = NULL;
            cleanUp(temps);
            temps = NULL;
            readFileName(fn);
//          fin = openInputFile(fn);
            month = readMonth(fin);
            temps = fillArray(month, fin);
节目快结束了

int main(int argc, char *argv[]){
    int month, choice;
    int * temps;
    FILE * fin = NULL;
    char fn[MAX];
    fin = openFile(argc, argv);

    month = readMonth(fin);
    temps = fillArray(month, fin);
            fclose(fin);
            fin = NULL;
            cleanUp(temps);
            temps = NULL;
            readFileName(fn);
//          fin = openInputFile(fn);
            month = readMonth(fin);
            temps = fillArray(month, fin);

我建议使用fgets而不是scanf,否则每次输入长度超过MAX时,应用程序都会崩溃。scanf会在分配的内存边界上进行写入,从而扰乱了主函数中的堆栈内存。(当然,如果用户输入太长,需要刷新,stdin中可能仍然有字符,但这是另一回事)

下面是一个简单的例子:

#include <cstdio>

#define MAX 100

void readFileName(char fileName[]){
    printf("Please enter the new file that you would like to open\n");
    fgets(fileName, MAX, stdin);

    printf("%s", fileName);
}

int main() {
    char fileName[MAX];
    readFileName(fileName);
    printf("Still works here: %s", fileName);
    return 0;
}
#包括
#定义最大值100
void readFileName(字符文件名[]){
printf(“请输入要打开的新文件\n”);
fgets(文件名、最大值、标准输入);
printf(“%s”,文件名);
}
int main(){
字符文件名[MAX];
readFileName(文件名);
printf(“仍然在这里工作:%s”,文件名);
返回0;
}

如何定义在函数调用中传递的
fn
?什么意思。字符fn[MAX];是在程序开始时创建的,从未使用过。然后发送readFileName(fn),所以
char-fn[MAX]
是一个从未使用过的全局文件吗?您能告诉我们如何调用函数
readFileName
?另外,尝试检查
scanf
的返回值。它不是全局的。它被声明为
char fn[MAX]
,然后当我们调用该函数时,它是
readFileName(fn)
尝试检查scanf的返回值。这是可行的,但我的错误似乎是在输入后发生的哈哈哈。非常感谢。