将数组中的元素i复制到另一个数组

时间:2014-04-20 11:48:11

标签: c arrays char strcpy

如何将char复制到数组?

char s[100], p[100];
in = fopen("infix.in","r");

while (fscanf(in,"%s",s) != EOF) {
    for (j = 0; j < strlen(s); j++) {
        if (s[j] - 48 >= 0 && s[j] - 48 <= 9) {
            for (i = j; i < j + 1; i++) {
                strcpy(p[i],s[j]);
            }
        }
    }
}

turbo c说“无法将'int'转换为'char *'”

这不起作用。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

我不确定你想要实现什么,但似乎你想要将所有数字从s复制到p。如果是这种情况,你需要知道strcpy将指针作为参数,而不是chars(因此,正如你所写的那样,它应该是strcpy(p+i, s+j))并且它复制整个字符串,直到nul字符(基本上,所有由printf(%s, s))显示。要复制字符,只需使用赋值运算符:p[i] = s[j]

答案 1 :(得分:0)

要将一个数组元素复制到另一个位置,您只需指定它

即可
p[i] = s[j];

您的循环从j转到j + 1,只复制一个元素。这意味着,您可以完全消除内部for循环

p[j] = s[j];

数字测试可以用

完成
if (isdigit(s[j]))
    p[j] = s[j];

您还可以将字符串长度保存在变量中,以避免昂贵的计算。整个循环变为

int len = strlen(s);
for (j = 0; j < len; j++) {
    if (isdigit(s[j]))
        p[j] = s[j];
}

p[i] = 0;

但是,看起来你想要提取数字,这将涉及目标数组的附加索引

int len = strlen(s);
int i = 0;
for (j = 0; j < len; j++) {
    if (isdigit(s[j])) {
        p[i] = s[j];
        ++i;
    }
}

p[i] = 0;

答案 2 :(得分:-1)

我建议使用strncpy,无需循环,并提供开箱即用的所需功能。

函数strncpy(S,P,strlen的(一个或多个);

更正:strcpy是不必要的,应该用assign替换。

我还建议用fgets替换fscanf。这里真的不需要fscanf。