C重命名()文件,在main()中使用默认名称



我想知道如何更改main((中已经有固定默认名称的文件的名称。

正如你在主体中看到的,文件的名称已经设置为movies.dat(char dateiname[50]="movies.dat"(,我想用大小写"d"来更改它,该大小写转到函数";dateiUmbenennen((";。此外,更改后的名称应该在我使用";dateiname";。

任何帮助都会很好!

这是我迄今为止的代码:

int
dateiUmbenennen(char* pdateiname)
{
char newName[50];
printf("Bitte geben Sie den neuen Namen mit gewuenschtem Dateitypen ein: ");
scanf("%s", &newName);
int res = rename(pdateiname, newName);
if (!res)
{
printf("Datei wurde erfolgreich in %s umbenannt!n", newName);
*pdateiname = newName[50];
}
else
{
printf("ERROR: Umbenennung fehlgeschlagen mit dem Fehler: %s!n", strerror(errno));
}
return 0;
}
// ================================================================
// MAIN
// ================================================================
int main(void)
{
// Default fuer Namen der Filmdatei
char dateiname[50]= "movies.dat";
// Hilfsvariablen-------------------------------------------------------------------------------------------------

// Hilfsvariable fuer do-while-Schleife
int stopLoop = 0;
// Hauptschleife
do {
// Ausgabe des Bildschirm-Menus
printf("nAUSWAHL-MENU:n");
printf("(n)   Neuen Film eingebenn");
printf("(a)   Alle Filme anzeigen lassenn");
printf("(o)   Filmdatenbank aus Datei einlesenn");
printf("(s)   Filmdatenbank in Datei speichernn");
printf("(d)   Dateinamen fuer Lesen/Speichern festlegen (Aktuell: %s)n",
dateiname);
printf("(q)   Programm verlassenn");
//printf("nIhre Wahl: ");
// Abfrage der Benutzerwahl
char ch = _getch();
printf("%cnn", ch);
// Aktionen in Abhaengigkeit von der Benutzerwahl
switch (ch)
//----------------------------------------------------------------------------------------------------------------------
{
case 'q': // Programm verlassen
stopLoop = 1;
break;
case 'n': // Neuen Film eingeben
movieDatensatz = benutzerEingabe();
break;
case 'a': // Alle Filme anzeigen lassen
konsolenAusgabe(movieDatensatz, anzahlFilme=dateiEinlesen(dateiname));
break;
case 'o': // Filmdatenbank aus Datei einlesen
dateiEinlesen(dateiname);
break;
case 's': // Filmdatenbank in Datei speichern
break;
case 'd': // Dateinamen fuer Lesen/Speichern festlegen
dateiUmbenennen(&dateiname[50]);
break;
case 'h':
printf("%s", dateiname);
break;
default:  // keine gueltige Eingabe
printf("==> Ungueltige Eingabe!n");
}
} while (!stopLoop);
return 0;
}

如果希望函数dateiUmbenennen更改函数main中数组dateiname的内容,则在从main调用函数dateiUmbenennen时,应将指针传递到该数组。

你似乎正试图在行中做到这一点

dateiUmbenennen(&dateiname[50]);

然而,这是将该数组的51st元素的地址(它甚至不存在,因为数组只有50个元素(传递给函数。这没有道理。您应该传递数组开始的地址,即1st元素的地址。你可以这样做:

dateiUmbenennen( &dateiname[0] );

然而,更常见的是简单地编写

dateiUmbenennen( dateiname );

因为在此上下文中使用数组将导致数组自动衰减为指向第一个元素的指针。

线路

*pdateiname = newName[50];

也没有意义,因为这一行将数组newName的(不存在的(51st元素复制到pdateiname所指向的任何元素(应该是dateiname的开头,但不在您发布的代码中(。假设pdateiname指向dateiname的开头,那么可以使用函数strcpy复制整个字符串,如下所示:

strcpy( pdateiname, newName );

此外,我建议您更改线路

scanf("%s", &newName);

scanf("%49s", &newName);

这样,如果用户输入的字符超过49个,就不会使newName数组溢出。

*pdateiname = newName[50];

实际上没有任何意义——它读取一个无效的位置(newName[50]超过了数组的末尾(并复制一个字符。你可能想做的是

strcpy(pdateiname, newName);

以将字符串从CCD_ 13阵列复制到CCD_。

最新更新