[英]c fgets char array
我对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 }
扑朔迷离的是:
unwichtig1
jochen g
unwichtig2
unwichtig3
输出:
/A match found on line: 2 jochen g tmp[0]:unwichtig3 ��Ł�, ich funktioniere
为什么不能将“ jochen”保存在tmp[0]
?
分配给tmp [1]就是分配给随机内存,因为数组不是很大。 它将产生各种不良影响-包括使程序崩溃。
您还将重用temp []数组-这样将继续被覆盖,如果要保留字符串,则需要复制该字符串。
有几个问题。 我根本没有看过moep()
,只看了main()
。
您可能不打算将tmp
声明为:
char* tmp[1];
这声明了一个指针,但是没有指向任何地方。 访问其中的第二个元素不是“洁净的”,因为它被声明为一个元素。 (但这并不重要,因为未分配数组。)
可能是您的意思
char tmp[2];
这将为两个字符分配一个空间。
有点混乱。
temp
是一个指向char的指针数组。 您将指向temp的指针分配给该数组的第一个,第二个等元素。 就是说,这始终是相同的值,因为temp
本身不会改变,并且其内容在每次循环迭代时都会被覆盖。
使用strncpy()
将一个字符串复制到另一个字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.