C 将字符串插入双数组
几天前,我在构造一个函数的过程中得到了帮助,该函数可以得到如下字符串:C 将字符串插入双数组,c,string,C,String,几天前,我在构造一个函数的过程中得到了帮助,该函数可以得到如下字符串: "1 2.2 3 4.4 5 6.6 7 8.5" 并以以下形式将其插入数组[2][4](在本例中): 1 | 3 | 5 | 7 2.2|4.4|6.6|8.5 用于创建阵列的函数是: //'function' is char*,'array' is double array for(p = function; *p != '\0' ;p++){//convert double by strtod
"1 2.2 3 4.4 5 6.6 7 8.5"
并以以下形式将其插入数组[2][4](在本例中):
1 | 3 | 5 | 7
2.2|4.4|6.6|8.5
用于创建阵列的函数是:
//'function' is char*,'array' is double array
for(p = function; *p != '\0' ;p++){//convert double by strtod
item = strtod(p, &p);
++div;
if((div%2)!=0)
{
array[0][j]=item;
}
else
{
array[1][j++]=item;
div=0;
}
}
代码中的问题是,函数只将值插入数组[0][j],而不插入数组[1][j],这意味着数组看起来像(如果数组在开始时初始化为0):
这些值仅插入数组的第一行,
如果我使用字符串调用函数:
"0.5 2 1 4 3 6 0.5 8"
所以项目始终为0,我不知道为什么:\
前一职位:
谢谢首先,您的代码可以正常工作。但是,指针
p
的增量超过了字符串的末尾,之后您将看到内存中的任何内容,并覆盖数组的内容。问题在于:
for(p = function; *p != '\0' ;p++) {
item = strtod(p, &p);
// (other code)
}
调用最后一个数字(8.5)的strtod
后,指针p
已经指向空终止符。但是,您的for循环调用p++
,将其递增一次,超过空终止符。在此之后,函数将继续运行一段时间,用垃圾填充数组,并可能损坏内存
解决办法是:
for(p = function; *p != '\0' ;) {
item = strtod(p, &p);
// (other code)
}
在这种情况下,在大多数迭代中,p
指向每个数字之前的空格。这没关系,因为strod显式忽略空白。在上一次迭代之后,p
指向空终止符,循环在损坏数组和内存的其他部分之前结束
以这种方式处理指针容易出错。我建议您使用该语言中提供的解析功能,首先使用
strtok()。但是,指针p
的增量超过了字符串的末尾,之后您将看到内存中的任何内容,并覆盖数组的内容。问题在于:
for(p = function; *p != '\0' ;p++) {
item = strtod(p, &p);
// (other code)
}
调用最后一个数字(8.5)的strtod
后,指针p
已经指向空终止符。但是,您的for循环调用p++
,将其递增一次,超过空终止符。在此之后,函数将继续运行一段时间,用垃圾填充数组,并可能损坏内存
解决办法是:
for(p = function; *p != '\0' ;) {
item = strtod(p, &p);
// (other code)
}
在这种情况下,在大多数迭代中,p
指向每个数字之前的空格。这没关系,因为strod显式忽略空白。在上一次迭代之后,p
指向空终止符,循环在损坏数组和内存的其他部分之前结束
以这种方式处理指针容易出错。我建议您使用该语言中提供的解析功能,首先使用strtok()。但是,指针p
的增量超过了字符串的末尾,之后您将看到内存中的任何内容,并覆盖数组的内容。问题在于:
for(p = function; *p != '\0' ;p++) {
item = strtod(p, &p);
// (other code)
}
调用最后一个数字(8.5)的strtod
后,指针p
已经指向空终止符。但是,您的for循环调用p++
,将其递增一次,超过空终止符。在此之后,函数将继续运行一段时间,用垃圾填充数组,并可能损坏内存
解决办法是:
for(p = function; *p != '\0' ;) {
item = strtod(p, &p);
// (other code)
}
在这种情况下,在大多数迭代中,p
指向每个数字之前的空格。这没关系,因为strod显式忽略空白。在上一次迭代之后,p
指向空终止符,循环在损坏数组和内存的其他部分之前结束
以这种方式处理指针容易出错。我建议您使用该语言中提供的解析功能,首先使用strtok()。但是,指针p
的增量超过了字符串的末尾,之后您将看到内存中的任何内容,并覆盖数组的内容。问题在于:
for(p = function; *p != '\0' ;p++) {
item = strtod(p, &p);
// (other code)
}
调用最后一个数字(8.5)的strtod
后,指针p
已经指向空终止符。但是,您的for循环调用p++
,将其递增一次,超过空终止符。在此之后,函数将继续运行一段时间,用垃圾填充数组,并可能损坏内存
解决办法是:
for(p = function; *p != '\0' ;) {
item = strtod(p, &p);
// (other code)
}
在这种情况下,在大多数迭代中,p
指向每个数字之前的空格。这没关系,因为strod显式忽略空白。在上一次迭代之后,p
指向空终止符,循环在损坏数组和内存的其他部分之前结束
以这种方式处理指针容易出错。我建议使用该语言中提供的解析工具,从strtok()
开始,在调试器中运行代码,并查看索引的位置。问题已解决。我尝试这样做,但如果我使用“0.5 2 1 4 3 6 0.5 8”调用函数,因此项始终为0,我不知道原因:\n您知道吗?在调试器中,您可以逐行跟踪程序的执行,检查变量的状态,等等?当然,我认为问题是p不知道字符串函数何时结束,我用strcpy从文件中读取字符串,可能没有设置在字符串“\0”的末尾?您希望得到答案吗?在调试器中运行代码并查看索引的位置。问题已解决。我尝试这样做,但如果我使用“0.5 2 1 4 3 6 0.5 8”调用函数,因此项始终为0,我不知道原因:\n您知道吗?在调试器中,您可以逐行跟踪程序的执行,检查变量的状态,等等?当然,我认为问题是p不知道字符串函数何时结束,i r