我在函数中使用此代码来获取文件中最短和最长的字符串。长度变量和字符串在循环外部声明。 int变量在循环内外都可以正确更新,但是char*变量仅在循环内可以正确更新。

在最后一个printf语句中,我得到:

the string Zulia
 is the longest in a2.txt and has 18 chars

the string Zulia
 is the shortest in a2.txt and has 5 chars


这里发生了什么?

fp1 = fopen(fileName, "r");

        if (fp1 == NULL)
        {
            printf("Error while opening file: %s\n",fileName);
            exit (1);
        }



            int lengthLongestString=1;
            int lengthShortestString=1000;

            int lengthActualString=0;

            char *longestString;
            char *shortestString;
            char *currentString;



        while (fgets(fileLine,  SIZE_OF_LINE, fp1) != NULL)
        {

            if(((strcmp(fileLine, "\n") != 0)) && (strcmp(fileLine, "\r\n") != 0)){     //Validates against storing empty lines

                lineas[numeroLineas++] = strdup(fileLine);


                             lengthActualString=strlen(fileLine);
                             currentString=fileLine;


                             if (lengthActualString>lengthLongestString){



                                  lengthLongestString = lengthActualString;

                                  longestString=fileLine;
                                  printf("the longest string now is %s \n",longestString);

                 }

                 else if (lengthActualString<lengthShortestString){

                     lengthShortestString = lengthActualString;


                                 shortestString=fileLine;
                     printf("the shortest string now is %s \n",shortestString);
                } // END IF


            }// END IF

          } //END WHILE

          printf("the string %s is the longest in %s and has %d chars\n",longestString, fileName, lengthLongestString );
          printf("the string %s is the shortest in %s and has %d chars\n",shortestString, fileName, lengthShortestString);

最佳答案

longestStringshortestString是指针。他们指向某个地方。当然,如果您更改某处的内容,则指针指向的内容已更改:-)

您需要为longestStringshortestString分配内存(或将它们定义为数组而不是指针),然后在其中复制字符。

10-08 19:31