我有一个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);
}
我的问题分为两部分。
如何获取此char数组的长度?这个例子中的int in_size = (int)(sizeof(in_string));
给出了8,它是指针的大小(long int)。我知道我可以创建一个for循环,直到它看到null终止,但是有更好的方法吗?我以前使用char []和sizeof
效果很好,但现在我转换为char *。
如何将这些字符的一部分写入out_string
。我的示例目前将所有字符写入out_string
。
这是原始输出:
In_String=LL,4014.84954
Start_String=LL,4014.84954
8
Out_String=LL,40014.84954
答案 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'