Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String - Fatal编程技术网

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