2014-04-20 304 views
0

如何将char复制到数组中?将阵列中的元素i复制到另一个阵列

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说: “无法将 '诠释' 到 '字符*'”

这是行不通的。我该如何解决这个问题?

+1

你的代码现在是非常不可读的,考虑在适当的地方添加空格 – d3dave

+0

请解释你的代码试图做什么,它看起来像找到小数位有关,但我是不知道究竟是什么意图的行为。 – dasblinkenlight

+0

你究竟得到了什么,什么确切你是否希望得到? – ThoAppelsin

回答

0

我不知道你想达到什么,但似乎你想复制所有数字从s到p。如果是这样的话,你需要知道strcpy将指针作为参数,而不是字符(所以,如你所写,应该是strcpy(p+i, s+j)),它会复制整个字符串,直到nul字符(基本上,所有显示的printf(%s, s))。要复制一个字符,只需使用赋值运算符:p[i] = s[j]

0

要将一个数组元素复制到另一个位置,你可以为它分配

p[i] = s[j]; 

你的环从jj + 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; 
+0

我只是想如果s [j] =数字复制数字到p [i]不复制s数组的整个元素到P – user3553759

+0

请参阅更新的答案。 –

-1

我建议用strncpy它无需环路并提供所需的功能。

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

纠错:所述的strcpy是不必要的,并且应该与分配来替换

我也建议用于fgets取代的fscanf实在没有必要。对于fscanf在这里

+0

'p'目前是不确定的,从它复制不是一个好主意。有时strncpy不会终止它的缓冲区,所以对于这个操作来说这是一个糟糕的选择。 –

+0

我的错误是,我引用了inner for循环,但正如其他人指出的那样,它只需要一个简单的赋值。 –

相关问题