【发布时间】:2016-10-03 13:34:02
【问题描述】:
我想知道如何将字符串的一部分复制到另一个字符串中,所以我查看了这个网站,看看是否可以得到答案,我做到了:How can I copy part of another string in C, given a starting and ending index
但是,当我使用这个时
strncpy(dest, src + beginIndex, endIndex - beginIndex);
在我的代码上,它不起作用。为什么?我想我已经正确添加了索引。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <math.h>
#define MAX 15
int main()
{
int j=0;
int i;
char RPNarray[MAX];
printf("Enter the RPN");
fgets(RPNarray,MAX,stdin);
int t=strlen(RPNarray);
double RPN[t][2];
for(i=0;i<=t;i++)
{
if(isspace(RPNarray[i]))
{
i=i+1;
}
else if (isdigit(RPNarray[i]))
{
int q,h;
q=i;
for (h=i;isdigit(RPNarray[h]);h++)
{
h=h+1;
}
int r;
double u;
r=h-q;
char number[r];
printf("%s ", RPNarray);
strncpy(number,RPNarray + q,h - q);
printf ("%s\n",number);
u=atof(number);
printf("%lf.\n",u);
RPN[j][0]=0;
RPN[j][1]=u;
i=i+1;
j=j+1;
}
}
int b;
for (b=0;b<=j;b++)
{
printf("%lf %lf \n",RPN[b][0],RPN[b][1]);
}
}
r是数字的位数,q是数字的第一个数字的位置,h是非数字的数字后面的第一个位置。
这个程序应该像代码所说的那样打印 RPN 矩阵。
(0,(first number we introduce via stdin)
(0,(second number we introduce via stdin)
(0,(third number we introduce via stdin)
我还添加了更多打印以查看问题出在哪里,如您所见,第二次打印没有按应有的方式打印。
如果输入是:
56 6
The output is:
56 6
56OT?
56.000000.
vector 0.000000 56.000000
vector 0.000000 0.000000
我该怎么做才能输出:
56 6
56
56.000000.
56 6
6
6.000000.
vector 0.000000 56.000000
vector 0.000000 6.000000
谢谢
【问题讨论】:
-
请编辑您的帖子并修正缩进。
-
了解如何使用调试器,并逐行执行代码。
-
循环结束条件
<=可疑。在第一个t超过了字符串的长度。在第二个中,b正在索引RPN[b]的一个元素,该元素尚未设置为j的当前值,该值在使用后递增。 -
为了便于阅读和理解:1) 一致地缩进代码 2) 变量名应该指示内容或用法(或更好,两者兼而有之) 3) 单独的代码块(for、if、else、while、 do...while, switch, case, default) 通过一个空行。
-
不要
#include头文件那些内容没有被使用。 IE。不包括 math.h
标签: c arrays numbers digit strncpy