这是我使用fgets时的照片。(它不能正常工作,太慢了!!)
c - 使用fgets而不是get时出现错误-LMLPHP
这是一张照片(工作正常)
c - 使用fgets而不是get时出现错误-LMLPHP

# define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>

struct sNode {
    struct sNode* tNode;
    int G[20];
};

struct tNode {
    struct tNode* prev;
    struct tNode* next;
    int data;
    int used;
};

int convert_input(struct sNode** t_ArrayRef, char string[200])
{
    int j = 0, i = 0, temp = 0;
    int K[20];
    while (string[i] != '\0')
    {
        temp = 0;
        while (string[i] != ' ' && string[i] != '\0')
            temp = temp * 10 + (string[i++] - '0');
        if (string[i] == ' ')
        {
            i++;
        }

        (*t_ArrayRef)->G[j++] = temp;

    }

    return j - 1;
}

int main() {

int i;
char string[200];
char* str[5];

struct sNode* t = (struct sNode*)malloc(sizeof(struct sNode));

str[0] = string;


//fgets(str[0], sizeof(str[0]), stdin); // doesn't works !!!
gets(str[0]); // works !!!

int c = convert_input(&t, str[0]);

int num = t->G[0];
const int a = num;
struct tNode* tNod[6000];

for (i = 0; i<num; i++) {
    tNod[i] = (struct tNode*)malloc(sizeof(struct tNode));
}i = 0;

for (i = 1; i<num; i++) {
    tNod[i - 1]->data = i;
    tNod[i - 1]->used = 0;

    if (i != num - 1) {
        tNod[i - 1]->next = tNod[i];
    }
    else {
        tNod[i - 1]->next = tNod[i];
        tNod[i]->data = i + 1;
        tNod[i]->next = tNod[0];
    }
}i = 0;

struct tNode* current;

i = 1; int j = 0; int fCount = 0; int zCount = 0;
current = tNod[i - 1];
printf("<");
while (fCount == 0) {
    while (current->used == 1) {
        current = current->next;
        j++;
        if (j > num) {
            fCount = 1;
            break;
        }
    }
    j = 0;
    if (i % t->G[1] == 0 && fCount == 0) {
        zCount++;
        if (zCount != t->G[0]) {
            printf("%d, ", current->data, i);
            current->used = 1;
        }
        else {
            printf("%d", current->data, i);
            current->used = 1;
        }
    }
    i++;
    current = current->next;
}
printf(">");
return 0;

}
有人能解释一下为什么我不能用fgets来工作吗?

最佳答案

当你使用

fgets(str[0], sizeof(str[0]), stdin);

您没有传递正确的大小:sizeof(str[0])是指向char的指针的大小,而不是存储在其中的200字节char数组的大小。
编译器在编译时解析这个sizeof运算符。它不知道您放入元素0的值实际上,它完全忽略了零,替换为sizeof(*str)
通过传递正确的大小来解决此问题:
fgets(str[0], sizeof(string), stdin);

关于c - 使用fgets而不是get时出现错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43643546/

10-11 22:05