首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C结构解引用值要求

C结构解引用值要求
EN

Stack Overflow用户
提问于 2014-09-03 10:02:44
回答 3查看 978关注 0票数 1

我目前正在用borland编写代码,我在结构取消方面遇到了问题。当前->值= x;给出了所需的Lvalue错误。如果"value“是char,则不会发生这种情况。是否存在将x的值赋给当前->值的问题?

代码语言:javascript
复制
#include<stdio.h>
#include<conio.h>

char x[16];
FILE *fin;

struct node {
    char value[16];
    struct node *next,*prev;
};
struct node *current;

void main(){
    fin = fopen("tokens.ctr","r");
    current = (struct node*) malloc(sizeof(struct node));
    fscanf(fin,"%s",&x);
    current->value = x; 
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-03 10:09:08

简而言之,因为c不允许您复制这样的数组。您必须使用循环或使用memcpy ot strcpy复制数组的每个元素。

顺便说一句,

  • 没有理由在这样的文件范围内声明x和fin。您应该最小化变量的范围。
  • main必须返回int,而不是void
  • 不要将来自malloc的返回抛出。它返回一个可以分配给任何其他指针类型的void *
  • 如果任何令牌都是16个或更多字符,则fscanf调用很容易出现未定义的行为。
票数 3
EN

Stack Overflow用户

发布于 2014-09-03 10:07:02

你的主语是错的:

代码语言:javascript
复制
void main(){
  fin = fopen("tokens.ctr","r");
  current = (struct node*) malloc(sizeof(struct node));
  fscanf(fin,"%s",&current->value);
  // current->value = x;  <-- this was wrong too, read the comments:)
}

您应该记住,最多可以读取15个字符(+ \0)。%s将尽可能多地阅读。您可能应该使用类似%15s或另一个函数,如freadfgets

编辑:使用fgetsstrncpy,关闭流和内存:

代码语言:javascript
复制
void main(){
  FILE* fin = fopen("tokens.ctr","r");
  if (NULL != fin) {
    struct node* current = (struct node*) malloc(sizeof(struct node));
    if (NULL != current) {
      char x[16];
      fgets(x, sizeof(x), fin); // fread(fin, 
      strncpy(current->value, x, sizeof(current->value)); 
      free(current);
    }
    fclose(fin);
  }
}
  1. 不需要声明类似局部变量的全局变量。
  2. 在需要变量的地方初始化变量(它可能不适用于所有C标准,但应该与--std=c99一起使用)
  3. fgets从fin中读取最多小于(X)字符大小的一个字符。您不必维护%15sx大小之间的关系。
  4. strncpy最多复制sizeof(current->value)xcurrent->value
  5. 我不知道这是否是一个简单的样本,但不要忘记释放你使用的资源,当你不再需要它们。
票数 2
EN

Stack Overflow用户

发布于 2014-09-03 10:07:36

代码语言:javascript
复制
fscanf(fin,"%s",&x);
current->value = x; 

应:

代码语言:javascript
复制
fscanf(fin, "%s", x);
strcpy(current->value, x); 

或者:

代码语言:javascript
复制
fscanf(fin, "%s", current->value);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25641494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档