1

我有一个 char 数组LL,4014.84954,我将其发送到如下示例的函数中:

#include <stdio.h>
#include <math.h>

void myFunction(char* in_string, char* out_string) {
  printf("Start_String=%s\n", in_string);
  int in_size = (int)(sizeof(in_string));
  printf("%d\n", in_size);
  int i = 0;
  for(i = 0; i <= in_size-ceil(in_size/2); i++) {
    out_string[i] = in_string[i];
  }
}

int main(int arg) {
  char in_string[] = "LL,4014.84954";
  char out_string[] = "";
  printf("In_String=%s\n", in_string);
  myFunction(in_string, out_string);
  printf("Out_String=%s\n", out_string);
}

我的问题有两个部分。

  1. 如何获取此 char 数组的长度?int in_size = (int)(sizeof(in_string));在这个例子中给了我 8 这是指针的大小(long int)。我知道我可以制作一个 for 循环,直到它看到空终止,但是有更好的方法吗?我以前使用 char[] 并且sizeof效果很好,但现在我正在转换为 char*。

  2. 我怎样才能将这些字符的一部分写入out_string. 我的示例当前将所有字符写入out_string.

这是原始输出:

In_String=LL,4014.84954
Start_String=LL,4014.84954
8
Out_String=LL,40014.84954
4

2 回答 2

1

关于您的第一个问题,请使用strlen().

关于第二个问题,首先你需要确保它out_string足够宽以容纳结果。目前,它不是,并且您的代码的行为是未定义的。解决此问题后,要复制字符串的一部分,您需要更改for循环的初始条件和最终条件,不要忘记 NUL 终止符。

于 2013-03-23T19:18:28.450 回答
1

(1) 对问题 2 的回答:

char out_string[] = "";

out_string[]只有一种尺寸。您分配 错误并导致未定义的错误out_string[i] = ...i > 0而不是这个,你应该out_string[]这样声明:

out_string[] = malloc(strlen(in_string) + 1);

//                                        ^ extra for \0 char

(2) 另外@WhozCraig 评论正确,你实际上需要strlen()找到字符串的长度。sizeof 你用错了。

所以替换:

int in_size = (int)(sizeof(in_string));

经过

int in_size = strlen(in_string);

(3) 还有,什么是in_size-ceil。正如我从您的原始输出中了解到的那样,您不需要这种函数和计算。只需替换您的 for 循环:

for(i = 0; i <= in_size-ceil(in_size/2); i++) 

经过

for(i = 0; i < in_size; i++) 

(4) 最后不要忘记终止你string out_string,在 for 循环后添加这一行

out_string[i] = '\0'
于 2013-03-23T19:44:20.603 回答