按照 lcoftp 说的,试试非字面量,而是一个 可读可写的 字符串数组
依然没啥发现
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdint.h>
- #include <string.h>
- char *xx_strcpy(char *s1,char *s2)
- {
- char *temp;
- uint32_t s2_len = 0;
- int i;
-
- if( (s1 == NULL) || (s2 == NULL) )
- return NULL;
-
- temp = s2;
-
- while(*temp != 0)
- {
- temp++;
- s2_len++;
- }
- for(i = s2_len;i >= 0;i-- )
- *(s1+i) = *(s2+i);
-
- *(s1 + s2_len + 1) = 0;
- return s1;
- }
- #define TEST_STRING "IDOYOULOVE"
- int main(void)
- {
- char s[12];
- char src[12] = {'0','1','2','3','4','5','6','7','8','9','a'};
- // 但这种写法要注意一个问题,比如一个12元素的数组,你要留最后一个位置,它会自动
- // 填充0,这是不初始化的默认值,假设没这个0,这个src事实上也不是一个字符串
- // 因为没有0结尾,所以会出现错误。
- // 这是我在写这个测试代码的过程中发现的。
-
- strcpy(s,src + 4);
-
- printf("strcpy:%s\n",s);
-
- xx_strcpy(s,src);
-
- printf("XX:%s\n",s);
- // 还是没啥毛病
-
- }