- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试编译我的代码时,出现以下错误:
error #2168: Operands of '=' have incompatible types 'char [255]' and 'char *'.
error #2088: Lvalue required.
我在同一行(即 1044)和多行上遇到这些错误,所以我想通过修复一个我可以修复其他的,所以让我把代码复制给你。您可以跳过并只阅读注释以 ** 开头的行,以使其更容易 :) 并以 <-- 结尾我希望代码注释对您有所帮助:首先让我从定义类型 PRINTOPT 开始
typedef struct {
//UsePl signifies if the user would like to see the graphs without having to export data
//Thanks to PlPlot library.
int usePl;
//Feel free to customize and add to this struct
//for any simulation program you create.
//---- Note2self: probably change the graph bool to an array,
//as later you will have to print around 20 graphs or so
int thetaGraph; //Plot Theta VS Time
int omegaGraph; //Plot Omega VS Time
char filename[255]; //**I have declared it to be a 255 char. <============
int matlab; //0 no, not 0 yes;
} PRINTOPT;
引发错误的函数 int ReadPrintOpt(PRINTOPT *opt) { 整数输入;
int usePl;
int thetaGraph;
int omegaGraph;
//**The result behind this def, i would like the user to input a filename
//To save his data in, <========================================================
char filename[255] = "Osc Motion and Chaos- Results"; //I have declared filename as char [255]
int matlab;
printf("\n----Print Options----\n");
printf("\nMENU (choose one of the following commands)\n");
printf("\n\t 1 - Display Graphs after Simulation\t\t\tCurrent Val\t\"%d\"",opt->usePl);
printf("\n\t 2 - Enable Theta vs Time Graph\t\tCurrent Val\t\"%d\"",opt->thetaGraph);
printf("\n\t 3 - Enable Omega vs Time Graph\t\tCurrent Val\t\"%d\"",opt->omegaGraph);
printf("\n\t 4 - Save Data in Matlab Format\t\tCurrent Val\t%d",opt->matlab);
printf("\n\t 5 - Filename for exported files\t\tCurrent Val\t%s",opt->filename);
printf("\n\n\t 0 - <DONE>\n>>");
scanf("%d",&input);
switch(input) {
case 0:
return 0;
case 5:
printf("Enter Filename: ");
fgets(filename, 255, stdin); //**i've been told to use this, saw it on another question
opt->filename = filename; //**In this part, opt is of type PRINTOPT
//I have been told that the name of an array, is actually
//a pointer to the first element, so why does this part
//give me this error -- Operands of '=' have incompatible types 'char[255] and [char*]
//although i've declared both as char[255];
break;
case 4:
printf("Enable Matlab (0 no, else yes): ");
scanf("%d",&matlab);
opt->matlab = matlab;
break;
case 1:
printf("Use this program to display plots (0 no, else yes): ");
scanf("%d",&usePl);
opt->usePl = usePl;
break;
case 2:
printf("Record Data for Graph of Theta (0 no, else yes): ");
scanf("%d",&thetaGraph);
opt->thetaGraph = thetaGraph;
break;
case 3:
printf("Record Data for Graph of Omega (0 no, else yes): ");
scanf("%d",&omegaGraph);
opt->omegaGraph = omegaGraph;
break;
default:
printf("Invalid Input!");
break;
}
return 1;
}
无论如何,我相信我已经将两个文件名都声明为 255 个字符,..编译器不会出错..所以我认为是我:)我哪里做错了?我的想法是我有一个函数可以扫描参数,例如驱动力..我需要模拟来转储该数据的文件:- 结果1.txt- 结果2.txt- 结果3.txt
这提出了另一个问题,但我肯定能找到答案,谷歌...我怎样才能在 c 中从 int 转换为 char。可能是简单的类型转换?
再次感谢
最佳答案
当数组标识符未用作 sizeof
时, _Alignof
或一元 &
运算符,衰减为指针,并且不是左值。这意味着您不能分配 opt->filename
与 =
运算符,就像您在这一行中所做的那样:
opt->filename = filename;
我可以看到两个解决方案。
opt->filename
作为char *
.当心 opt->filename
在 filename
的生命周期之外不使用.否则,行为未定义。opt->filaname
作为char[256]
并使用 strcpy
(来自 <string.h>
)。例如:
#include <string.h>
strcpy(opt->filename, filename);
一些引用资料:
C11 (n1570), § 6.3.2.1 Lvalues, arrays, and function designators
Except when it is the operand of the
sizeof
operator, the_Alignof
operator, or the unary&
operator, or is a string literal used to initialize an array, an expression that has type ‘‘array of type’’ is converted to an expression with type ‘‘pointer to type’’ that points to the initial element of the array object and is not an lvalue.
C11 (n1570), § 6.5.16 Assignment operators
An assignment operator shall have a modifiable lvalue as its left operand.
关于c - C : operands of unequal types, char[255] 和 char* 中的字符串问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15585010/
我正在尝试为一个简单的数学 Vector 类重载 += 运算符,以对两个 vector 的元素求和,如下所示: vector1 += vector2 部分Vector2D.h: #ifndef _VE
我正在尝试在 ASM 中编写一个简单的 for 循环。我需要访问两个数组,它们是在 C++ 代码片段之外编写的(即 OrigChars 和 EncrChars) char temporary_
Qt 版本 5.01 平台 windows 64 位 问题:错误:没有操作数“ #include #include #include namespace { std::ost
#include #include #define SIGBAD(signo) ((signo) = NSIG) int sigaddset(sigset_t *set, int signo
请看下面的代码。我正在使用 Apache Derby 作为嵌入式数据库 public List getDetails(String name) { List details =
我和我的讲师/实验室助理都被难住了。 出于某种原因,以下 HLSL 代码在输出窗口中返回: error X8000 : D3D11 Internal Compiler error : Invalid
我有一个创建时间跟踪器的 NPM 包,它使用 for in 来定位 MD 文件的标题,然后将其转换为跟踪器。目前,在 Mac 上运行它时工作正常,在 Windows 上我收到 dirname:miss
请注意这个问题是不是 this 的副本或 this ,因为其他问题没有运算符(operator) 组件,不要询问我正在询问的参数和参数的详细信息。 我将使用 vb.net 教授第一门编程类(class
输入 sudo apt autoremove 后出现此错误在终端 readlink: missing operand Try 'readlink --help' for more informatio
为什么 GCC 给我这个错误?我在这里做错了什么? temp.c: In function main: temp.c:6: error: invalid operands to binary +
我对此很陌生,我正在尝试将值从一个数组移动到另一个数组, 它假设是: vec1 = 1, 2, 3, 4, 5 vec2 = 5, 4, 3, 2, 1 但我收到一个错误:“指令操作数必须是相同的大小
我有一个 OR 表达式,它应该返回不是 NaN 的操作数: (1 || NaN) // evaluates to 1 (NaN || 1) // evaluates to 1 但是当另一个操作数也是一
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 4 年前。 Improve th
这道题是基于 Javascript 的,但适用于一般的逻辑运算 拿代码举例 if (baseText[i] == "."){ /*splice array*/;} if (baseText[
我似乎无法找到使程序运行的问题。 C 告诉我“错误:二进制操作数无效!= 'grocerylist'(又名 structgrocerylist)和 'int' 当我尝试解决此问题时,会弹出其他错误,除
我正在查看 the docs并尝试了解运算符的实际工作方式。 The increment operator (++) increments its operand by 1. The incremen
我有一个很长的 json 字符串,"attributeName":"Loc ID"},"operands":["10000"]}],"Frequency":{"type":" 这个只是其中的一部分,我
目前,我尝试编译 OpenVDB,它依赖于 Threading Building Blocks。我收到以下错误: In file included from /usr/include/tbb/enum
我收到的错误: /usr/include/c++/7/bits/stl_function.h:386: error: no operator " NearestNeighbor::nearest_pa
我有一个类Color , 那有 friend std::ostream& operator void print_head(const T& head, sost& o) { o (rsym,
我是一名优秀的程序员,十分优秀!