我試圖用函數填充幾個字符串,但字符串似乎沒有被正確填充。 print語句只有4個空行。但如果我取消註釋char ** pls行,它將正確打印所有三個字符串,即使我從不在任何地方使用變量pls。它也可以在調試模式下正常運行而不存在變量。我不完全確定我做了些什麼,但並不高興。函數調用中未填充C字符串
char * dataFile = (char *) calloc(64, sizeof(char));
//char ** pls = &dataFile;
char * queryFile = (char *) calloc(64, sizeof(char));
char * outFile = (char *) calloc(64, sizeof(char));
for(i = 1; i <argc; ++i)
{
char command[3];
char * iterator = argv[i];
command[0] = *iterator;
++iterator;
command[1] = *iterator;
++iterator;
command[2] = *iterator;
if(strcmp(command, "df=") == 0)
determineFileString(iterator, &dataFile);
else if(strcmp(command, "if=") == 0)
determineFileString(iterator, &queryFile);
else if(strcmp(command, "of=") == 0)
determineFileString(iterator, &outFile);
}
printf("%s\n%s\n%s\n", dataFile, queryFile, outFile);
void determineFileString(char * iterator, char ** file)
{
char * p = *file;
++iterator;
while(*iterator != '\0')
{
*p = *iterator;
++p;
++iterator;
}
*p = '\0';
}
「即使我從不在任何地方使用變量,它會正確打印所有三個字符串」的味道像未定義的行爲。 – Downvoter
在C中不需要使用calloc,它的返回類型是void *。任何方式回來的代碼,實際上編譯來看看程序是如何工作的。 – Michi