C 无法打印整个整型数组

C 无法打印整个整型数组,c,arrays,string,for-loop,atoi,C,Arrays,String,For Loop,Atoi,我的输出:612345644067870 我想要的是这个输出:1012345644067870455588 为什么我的程序没有打印所有的整数?谁能帮我检查一下我的代码有什么问题吗?我应该对代码做哪些更改?这是我的密码 #include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> main() { char m[100][1000]={"12

我的输出:
612345644067870

我想要的是这个输出:
1012345644067870455588

为什么我的程序没有打印所有的整数?谁能帮我检查一下我的代码有什么问题吗?我应该对代码做哪些更改?这是我的密码

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
main()
{
        char m[100][1000]={"123456","44","","67","87","","","45","55","88"};
        int len;
        int i;
        int j;
        int k;
        int n;
        int numm[1000];
        n=0;
        len=strlen(m[n++]);
        printf("%d\n",len);
        for (i=0;i<len;i++)
            numm[i]=atoi(m[i]);
        for (j=0;j<len;j++)
            printf("%d\n",numm[j]);
        for (k=1;k<len;k++)
        {
            if (numm[k]>100||numm[k]<0)
            {   
                printf("Error. Marks out of range.\n");
                exit(0);
            }
        }   
        return 0;   
}
#包括
#包括
#包括
#包括
main()
{
字符m[100][1000]={“123456”、“44”、“67”、“87”、“45”、“55”、“88”};
内伦;
int i;
int j;
int k;
int n;
整数毫米[1000];
n=0;
len=strlen(m[n++]);
printf(“%d\n”,len);

对于(i=0;i快速查看,我会说这是因为在两个维度上使用相同的长度(len)

你们的维度是不同的

len=strlen(m[n++]); // m[0]
printf("%d\n",len);
打印字符串“123456”=6的长度

[编辑]

如何获取数组的长度

len=0;
对于(i=0;i<100;i++){
如果(m&&m[i][0]='\0'){
打破
}
len++;
}
printf(“%d\n”,len);

[注意]如果您使用的是
“0”
而不是
来打印
0

,则此操作有效。如果您希望输出,请执行此操作

目前,您获取第一个字符串的长度,
“123456”
,并滥用它作为数组的长度,这是完全不相关的

数组的大小计算为
sizeof m/sizeof m[0]
,其中
sizeof m
是以字节为单位的总大小,
sizeof m[0]
是第一个元素的大小

然后你会打印1000个元素,但你只想打印声明的元素

作为
char[100][1000]
,这对我来说似乎很难;你最好使用
char*m[1000]

但你可以做到

len = sizeof m / sizeof m[0]; // initial length
while (!m[--len][0]); // decrement len until you find "something".

您的m数组是2D数组

m[0]="123456" |  m[0][0]='1'   m[0][1]='2'  ...
m[1]="44"     |  m[0][0]='4'   m[0][1]='4'
m[2]=""       |  m[0][0]='\0'
m[3]="67"

相当于

int n=0; len=strlen(m[0]); n=n+1;

因此
strlen()
此处将返回数组中第一个strin的长度(
m[0]
),而不是
m
数组的元素数。

我的建议是,您应该尝试调试代码,然后逐行查看哪里出了问题。不过,最可能的问题是索引长度。 在每次迭代中,您仍然使用相同长度的字符串
len=strlen(m[n++]);
,当然,对于其余的迭代来说,这是不正确的

尝试从第一个开始:

len = sizeof m / sizeof m[0];
然后使用循环中的第一个索引查看表格,例如GLGL的答案:

while (m[--len][0]);
#包括
#包括
#包括
int main(){
字符m[100][1000]={“123456”、“44”、“67”、“87”、“45”、“55”、“88”};
内伦;
int i,j,k,n;
整数毫米[1000];
对于(len=100;len>0;--len)
如果(*m[len-1])中断;
printf(“%d\n”,len);

对于(i=0;i)我会将
m
声明为一个全局或静态变量。它太大,无法停留在
main
len=strlen(m[n++]);
for(j=0;jDid我编辑了至少三篇文章的标题(和)在过去几天中?只要正确使用标记C,就不需要在标题中添加C编程。请尝试使用GDB check进行调试以获取更多信息。它将帮助您在运行时检查表达式的值以及它的用户友好性。希望这可能对您有所帮助。在使用调试器之前,它将帮助您你拿着纸和笔,一步一步地完成你的程序。请先自己完成。然后,如果你在某个你不理解的特定步骤中,问一个关于该步骤的精确问题。好的,谢谢。我怎样才能得到整个字符串的长度?@user3118123:哪个“完整”字符串。有10个。@user3118123:它是否约束NULL(“\0”)是数组的结尾。如果是,从零开始计数,直到遇到“\0”。如果不是,则不知道某个元素是否是数组中的最后一个元素。因此,循环100个元素以了解最后一个元素的索引。更新了我的ans;请查看
len = sizeof m / sizeof m[0];
while (m[--len][0]);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
    char m[100][1000]={"123456","44","","67","87","","","45","55","88"};
    int len;
    int i,j,k,n;
    int numm[1000];

    for(len = 100 ; len >0; --len)
        if(*m[len-1]) break;
    printf("%d\n",len);
    for (i=0;i<len;i++)
        numm[i]=atoi(m[i]);
    for (j=0;j<len;j++)
        printf("%d\n",numm[j]);
    for (k=1;k<len;k++){
        if (numm[k]>100||numm[k]<0){   
            printf("Error. Marks out of range.\n");
            exit(0);
        }
    }   
    return 0;
}