typedef struct Movie{
char hallName[50];
char movieName[50];
}movie;
我已動態創建的影片陣列。在processCommand
功能:段錯誤strcpy的
char *hallName;
hallName = strtok(NULL," ");
,並呼籲createHall
功能與此參數。
createHall(&halllName);
然後在createHall
函數我在這裏創建了電影結構元素並賦值。我想hallName
複製到Movie.hallName
。我這樣做strcpy,但我在Linux中得到一個分段錯誤。在Windows中,此代碼正常工作。
strcpy(Movie.hallName, *hallName);
我該如何解決這個問題?
編輯:
int main(int argc, char *argv[])
{
FILE *inputFile = fopen(argv[1], "r+");
FILE *outputFile = fopen("output.txt","w+");
char *line=NULL;
movie *Movies = (movie*)malloc((hallNumber)*sizeof(movie));
while(1) {
line = readLine(inputFile);
if (line == NULL)
break;
processCommand(line,outputFile,Movies,hallNumber);
}
free(Movies);
closeFiles(inputFile,outputFile);
return 1;
}
void processCommand(char *line) {
char *hallName = NULL, *command = NULL;
command = strtok(line, " ");
if (strcmp(command, "CREATEHALL") == 0) {
hallName = strtok(NULL, " ");
createHall(&hallName);
}
...
}
void createHall(char **hallName) {
movie Movie;
strcpy(Movie.hallName, *hallName); // problem in here
...
}
你的代碼沒有上下文。 'hallName = strtok(NULL,「」);'孤立無用。請發佈顯示問題的[Minimal,Complete和Verifiable示例](http://stackoverflow.com/help/mcve)。 –
那麼,爲什麼你驚訝地發現運行生成指針警告的代碼崩潰? –
你不看strtok的回報,他可能是NULL。 'command = strtok(line,「」);'here too'hallName = strtok(NULL,「」);'爲什麼在createHall中發送一個'int **'。 – Stargateur