Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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_Memory Management_Arrays - Fatal编程技术网

在C+中填充动态大小的数组+;并使用这些值

在C+中填充动态大小的数组+;并使用这些值,c,memory-management,arrays,C,Memory Management,Arrays,我想动态填充一个char数组,并检查所包含的值是否为有效整数,以下是我目前得到的结果: for(int i = 0; i < 50000; i++) { if(input[i] == ',') { commaIndex = i; } } Fill tempNumber(由于我的动态分配,它应该和数字一样大),所以我在50000字符数组(命名输入)中没有数字 for(int i=0;i您也可以考虑使用

我想动态填充一个char数组,并检查所包含的值是否为有效整数,以下是我目前得到的结果:

for(int i = 0; i < 50000; i++)
    {
        if(input[i] == ',')
        {
            commaIndex = i;
        }
    }
Fill tempNumber(由于我的动态分配,它应该和数字一样大),所以我在50000字符数组(命名输入)中没有数字

for(int i=0;iCUT

您可能对该函数感兴趣。

< P>您也可以考虑使用<代码> Sttokk()/<代码> <代码> SCANSF()/<代码>。注意,<<代码> STRTROR()/<代码>不允许您检查错误,因为它只是在解析错误上返回(完全有效的)值<代码> 0 <代码>。另一方面,<代码> sScCff()
返回成功读取的项目数,因此您可以轻松检查读取数字时是否有错误

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int i = 0;
    char str[] = "1,2,-3,+4,a6,6";

    /* calculate result table size and alloc */
    int max = 1;
    char* tmp = str;
    while (*tmp)
        if (*tmp++ == ',')
            ++max;

    int* nums = malloc(sizeof(int) * max);

    /* tokenize string by , and extract numbers */
    char* pch = strtok(str, ",");
    while (pch != NULL) {
        if (sscanf(pch, "%d", &nums[i++]) == 0)
            printf("Not a number: %s\n", pch);
        pch = strtok(NULL, ",");
    }

    /* print read numbers */
    for (i = 0; i < max; ++i)
        printf("%d\n", nums[i]);

    free(nums);

    return 0;
}
#包括
#包括
#包括
int main()
{
int i=0;
字符str[]=“1,2,-3,4,a6,6”;
/*计算结果表大小和alloc*/
int max=1;
char*tmp=str;
而(*tmp)
如果(*tmp++=',')
++最大值;
int*nums=malloc(sizeof(int)*max);
/*通过标记字符串,并提取数字*/
char*pch=strtok(str,“,”);
while(pch!=NULL){
if(sscanf(pch,“%d”,&nums[i++])==0)
printf(“不是数字:%s\n”,pch);
pch=strtok(空,“,”);
}
/*打印读取的数字*/
对于(i=0;i< /代码>是的,我可能是,我已经是,但是我忘了补充:这是一个家庭作业,我不允许使用字符串或任何面向对象的C++实现。谢谢你的提示!注意<代码> Strtol < /代码>不使用<代码> STD::String < /Cord>,但是包装了同名的标准C函数。呃,这意味着你在问C,而不是C++。我不知道,我是C/C++的新手,我会相应地更新我的问题,谢谢。C和C++是不同的语言。对象(通过<代码>类< /代码>)<>代码>模板<代码> -s是C++的核心;不幸的是,我也不允许使用它。我会在那里更新我的问题。给你的老师打耳光,这只是愚蠢的。你不应该允许使用<代码> STD::向量< /代码>,并且在重新学习它们时为了学习的目的类似。
for(int i = 0; i < commaIndex; i++)
    {
            cout << i << "\n";
            tempNumber[i] = input[i];
    }
if(!isValidInteger(tempNumber))
    {
        cout << "ERROR!\n";
    }
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    int i = 0;
    char str[] = "1,2,-3,+4,a6,6";

    /* calculate result table size and alloc */
    int max = 1;
    char* tmp = str;
    while (*tmp)
        if (*tmp++ == ',')
            ++max;

    int* nums = malloc(sizeof(int) * max);

    /* tokenize string by , and extract numbers */
    char* pch = strtok(str, ",");
    while (pch != NULL) {
        if (sscanf(pch, "%d", &nums[i++]) == 0)
            printf("Not a number: %s\n", pch);
        pch = strtok(NULL, ",");
    }

    /* print read numbers */
    for (i = 0; i < max; ++i)
        printf("%d\n", nums[i]);

    free(nums);

    return 0;
}