查找输入char *的大小和复制部分以输出char * C.

时间:2013-03-23 19:16:34

标签: c pointers char sizeof

我有一个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循环,直到它看到null终止,但是有更好的方法吗?我以前使用char []和sizeof效果很好,但现在我转换为char *。

  2. 如何将这些字符的一部分写入out_string。我的示例目前将所有字符写入out_string

  3. 这是原始输出:

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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()来查找字符串的长度。你使用错了。

所以替换:

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'