错误在哪里? (C程序不会打印出动态数组的内容)
Where is the error? (C program won't print out the content of dynamic array)
任务是从特定文件中读取前 20 行并将它们格式化为仅使用特定部分,下一步是将这些格式化的字符串存储在动态数组中(char ** str
|指向的指针一个指针),将它发送到一个函数并用所述函数打印出来
主要代码如下:
int main(int argc, char* argv[]){
FILE* file = fopen("./passwd.txt", "r"); // open file
if (!file)
{
perror("Error opening file");
return 1;
}
char line [MAXCHARS];
int counter = 0;
char ** str;
str = malloc(20 * sizeof (char*));
while (fgets(line, MAXCHARS, file) && counter < 20) {
char * position;
if ((position = strchr(line,':'))){
char * end_char;
*position = 0; //setting here the value 0, will terminate the string line (first column)
if((position = strchr(++position,':')) && (end_char = strchr(++position,':'))){ //increment the position to skip the second column
*end_char = 0; //set the value 0 to end_char to terminate the string pointed by position
char * temp_str = "[=10=]";
sprintf(temp_str, "{%d} - {%s}\n", atoi(position), line ); //concatenate line and userID into one string and store it into a temporary string
*(str + counter) = malloc(sizeof (char) * strlen(temp_str)); //set the memory space for the temp_string into the array
*(str + counter) = temp_str; //copy the string into the array
}
}
counter++;
}
printArray(str);
fclose(file);
if (line)
free(line);
return 0;
}
这里是打印函数:
void printArray(char ** array){
for(int i = 0; i < 20; i++){
printf("%s",*(array+i));
free(*(array+i));
}
free(array);
}
我找不到错误,代码用
编译
Process finished with exit code -1073741819 (0xC0000005)
所以至少它可以编译,我认为这只是我的指针处理技巧的问题,但我找不到错误。
有人可以帮助我吗?
您的程序中有 3 个错误:
使用未分配的temp_str
char * temp_str = "[=10=]";
sprintf(temp_str, "{%d} - {%s}\n", atoi(position), line );
将 temp_str
本地指针的地址保存到 str+counter
并在指针超出 printArray
=> 未定义行为
的范围后使用该指针
line
不是指针,不能用free
if (line)
{
free(line);
}
让我们试试这个。 https://godbolt.org/z/7KPfnTEMY我更正这些点
任务是从特定文件中读取前 20 行并将它们格式化为仅使用特定部分,下一步是将这些格式化的字符串存储在动态数组中(char ** str
|指向的指针一个指针),将它发送到一个函数并用所述函数打印出来
主要代码如下:
int main(int argc, char* argv[]){
FILE* file = fopen("./passwd.txt", "r"); // open file
if (!file)
{
perror("Error opening file");
return 1;
}
char line [MAXCHARS];
int counter = 0;
char ** str;
str = malloc(20 * sizeof (char*));
while (fgets(line, MAXCHARS, file) && counter < 20) {
char * position;
if ((position = strchr(line,':'))){
char * end_char;
*position = 0; //setting here the value 0, will terminate the string line (first column)
if((position = strchr(++position,':')) && (end_char = strchr(++position,':'))){ //increment the position to skip the second column
*end_char = 0; //set the value 0 to end_char to terminate the string pointed by position
char * temp_str = "[=10=]";
sprintf(temp_str, "{%d} - {%s}\n", atoi(position), line ); //concatenate line and userID into one string and store it into a temporary string
*(str + counter) = malloc(sizeof (char) * strlen(temp_str)); //set the memory space for the temp_string into the array
*(str + counter) = temp_str; //copy the string into the array
}
}
counter++;
}
printArray(str);
fclose(file);
if (line)
free(line);
return 0;
}
这里是打印函数:
void printArray(char ** array){
for(int i = 0; i < 20; i++){
printf("%s",*(array+i));
free(*(array+i));
}
free(array);
}
我找不到错误,代码用
编译Process finished with exit code -1073741819 (0xC0000005)
所以至少它可以编译,我认为这只是我的指针处理技巧的问题,但我找不到错误。
有人可以帮助我吗?
您的程序中有 3 个错误:
使用未分配的temp_str
char * temp_str = "[=10=]"; sprintf(temp_str, "{%d} - {%s}\n", atoi(position), line );
将
的范围后使用该指针temp_str
本地指针的地址保存到str+counter
并在指针超出printArray
=> 未定义行为line
不是指针,不能用free
if (line) { free(line); }
让我们试试这个。 https://godbolt.org/z/7KPfnTEMY我更正这些点