Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从包含浮点值的字符数组中获取第一个元素?_C++_Arrays_Linux_Pointers - Fatal编程技术网

C++ 如何从包含浮点值的字符数组中获取第一个元素?

C++ 如何从包含浮点值的字符数组中获取第一个元素?,c++,arrays,linux,pointers,C++,Arrays,Linux,Pointers,我试图从包含float的字符数组中获取第一个元素值。 字符数组的大小为7,它包含两个浮点元素,因此可以假定大小为8。我只想得到第一个元素,忽略关于第二个值的任何内容。 这是我的密码- int main() { char cArr[7] = {2.0085,4.52}; char* charPtr = nullptr; charPtr=cArr; cout<<"char[0] :"<<*charPtr<<endl; float* fPtr =(flo

我试图从包含float的字符数组中获取第一个元素值。 字符数组的大小为7,它包含两个浮点元素,因此可以假定大小为8。我只想得到第一个元素,忽略关于第二个值的任何内容。 这是我的密码-

int main()
{
 char cArr[7] = {2.0085,4.52};
 char* charPtr = nullptr;

 charPtr=cArr;
 cout<<"char[0] :"<<*charPtr<<endl;
 float* fPtr =(float*)charPtr; 
 cout<<"char[0] :"<<*fPtr<<endl;
 cout<<endl;
}
我期待着:

字符[0]:2.0085 对代码更改有什么建议吗

对代码更改有什么建议吗

你真的想要这个:

float cArr[2] = { 2.0085, 4.52 };
float *fPtr = cArr;

看起来您正试图让阵列容纳以下内容:

float fArr[2] = { 2.0085, 4.52 };
char cArr[7];
memcpy(cArr, fArr, 7);
您提供的代码不允许您访问浮点表示的字节。我会的


但是,仍然不允许通过指针转换从char数组中读取浮点值。这违反了严格的别名,并导致未定义的行为。要从数组中读取四个字节并将其视为浮点数的表示形式,您需要再次调用memcpy。

如果我理解您的问题是正确的,您有一个文本字符串,其中包含逗号分隔的小数点值。比如:2.0085,4.52

现在,您需要提取第一个小数点值,即2.0085,并将其转换为浮点值,即类似于浮点f=2.0085

您的代码有两个主要问题:

1文本字符串初始化错误,字符数组太短

2您不能通过强制转换指针来进行转换。您需要调用进行转换的特殊函数,例如atof

一种方法是:

#include <iostream>
#include <cstring>

int main()
{
  // Initialize text string with comma seperated decimal point values
  char cArr[32] = "2.0085,4.52";

  // Extract the first decimal point text string
  char* p = std::strtok(cArr, ",");
  std::cout << "First text string: " << p << std::endl;

  // Convert the text representation to a float representation
  float f = std::atof(p);
  std::cout << "First float value: " << f << std::endl;

  return 0;
}

你知道一个浮点数和一个字符有不同的二进制表示法吗?通过解释你的意思来改进这个问题:char cArr[7]={2.0085,4.52};事实并非如此。@DavidC.Rankin:不,这根本不像你的评论所说的那样。C++不只是在不要求的情况下将源代码转换成字符串。实际结果将是{char2.0085,char4.52,0,0,0,0,0},即{2,4,0,0,0,0}@A.Gupta:不,它不存储两个浮点元素。它存储7个字符元素。前两个元素通过浮点初始值设定项的有损转换进行初始化,每个元素都转换为一个字符。剩下的五个元素归零。@DavidC.Rankin:char2.0085是一个字符。char4.52也是一个char。然后,数组中的初始值设定项比元素少五个,因此索引2-6变为char0。这些不是字符文字,字符文字被单引号包围“它不是一个浮点数组,而是一个浮点元素的字符数组。@a.Gupta:您描述的行为是浮点数组的行为。是的,我想从数组cArr读取前4个字节,它本身是一个7字节。您是否可以在不修改这三行的情况下提供代码-char cArr[7]={2.0085,4.52};char*charPtr=nullptr;charPtr=cArr@A.Gupta您不能以您尝试的方式在char元素中存储浮点值。你必须改变你填充卡尔的方式。
First text string: 2.0085
First float value: 2.0085