【发布时间】:2020-02-07 14:57:46
【问题描述】:
我有一个简单的函数应该以不同的方式连接字符串。 如果我有一个字符串“abc”和另一个“123”最终字符串应该是“a1b2c3”。
这里是代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
char *connStrings(char *s1, char *s2) {
int s1L, s2L,i = 0,k=1,j=0;
s1L = sizeof(s1);
s2L = sizeof(s2);
char* result = (char*) malloc((s1L + s2L));
while (s1[i] != '\0') {
result[j] = s1[i++];
j = j + 2;
}
i = 0;
while (s2[i] != '\0') {
result[k] = s2[i++];
k = k + 2;
}
result[s1L + s2L] = '\0';
printf("\n %s \n", result);
}
int main() {
connStrings("abcdefghi","123456789");
}
那么问题是什么?
这个程序的最终输出还是一样的“a1b2c3d4e5f6g7h8”
它以某种方式忽略了 i 和 9 。即使我在两个字符串中添加更多字符,它仍然会打印相同的
“a1b2c3d4e5f6g7h8”。如有任何帮助或建议,我将不胜感激。
【问题讨论】:
-
sizeof(s1)不是字符串s1的长度。你是说strlen(s1)吗? -
这将返回指针的大小,而不是字符串长度:
sizeof(s1) -
哦,是的,这是个错误。非常感谢:)
-
你的函数类型是
char *,但你没有返回任何东西 -
这回答了你的问题:Sizeof vs Strlen