1

我有一个问题fgets。我无法在 if 语句中保存字符串“temp”。

编码:

      1 #include <stdio.h>
      2 #include <string.h>
      3 #include<stdlib.h>
      4 
      5 void moep(char** tmp){
      6         FILE *fp;
      7         fp=fopen("moep", "r");
      8         int line_num = 1;
      9         int find_result = 0;
     10         char* str="jochen";
     11         char temp[512];
     12 
     13 while(fgets(temp, 512, fp) != NULL) {
     14                 if((strstr(temp, str)) != NULL) {
     15                         printf("A match found on line: %d    \n", line_num);
     16                         tmp[find_result]=temp;
     17                         printf("\n%s\n", tmp[find_result]    );
     18                         find_result++;
     19                 }
     20                 line_num++;
     21         }
     22 fclose(fp);
     23 printf("tmp[0]:%s\n",tmp[0]);
     24 tmp[1]="ich funktioniere";
     25 }
     26 
     27 int main(){
     28 
     29         char* tmp[1];
     30         moep(tmp);
     31         printf("%s, %s\n",tmp[0],tmp[1]);
     32         return 0;
     33 }

和 moep 是:

unwichtig1
jochen g
unwichtig2
unwichtig3

输出:

/在线找到匹配项:2

约成克

tmp[0]:unwichtig3

��Ł�, ich funktioniere


为什么我不能保存“jochen” tmp[0]

4

3 回答 3

1

分配给 tmp[1] 是分配给随机内存,因为你的数组不是那么大。它会产生各种不良的副作用——包括使程序崩溃。

您还重用了 temp[] 数组 - 因此它将不断被覆盖,如果您想保留它,您需要复制字符串。

于 2012-10-15T18:42:46.887 回答
0

有几个问题。我根本没有看moep(),只是main()

您可能不打算声明tmp为:

 char* tmp[1];

这声明了一个指针,但不指向任何地方。访问其中的第二个元素不是“kosher”,因为它被声明为一个元素。(但这没关系,因为没有分配数组。)

可能你的意思是

 char  tmp[2];

这为两个字符分配了一个空间。

于 2012-10-15T18:42:48.963 回答
0

这有点乱。

temp是一个指向 char 的指针数组。您将指向 temp 的指针分配给该数组的第一个、第二个等元素。也就是说,这始终是相同的值,因为temp它本身不会改变,并且它的内容在循环的每次迭代中都会被覆盖。

用于strncpy()从一个字符串复制到另一个字符串。

于 2012-10-15T18:43:38.057 回答