我对C编程非常陌生。有人可以告诉我此代码有什么问题吗,我正在尝试运行此代码。
int main(void)
{ char source[10];
char *dest; size_t i;
strcpy(source, "0123456789");
dest = malloc(strlen(source));
for (i = 1; i <= 11; i++) {
dest[i] = source [i];
}
dest[i] = '\0';
printf("dest = %s", dest); return 0; 13. }
非常感谢
答案 0 :(得分:2)
首先,为source
分配足够的内存以容纳0123456789
。并且此dest[i] = '\0';
会导致不确定的行为,因为您在此处尝试访问(dest[10]
)您未分配的内容。因此,为dest
分配足够的内存以最后存储'\0'
。对于例如
dest = malloc(strlen(source) + 1);/* +1 is for \0 char as strlen(source) doesn't include \0 */
第二,不要认为source[0]
是整数零0
,它是零字符,即'0'
(ascii-48
)。因此,您无需从i=1
开始旋转,从i=0
一直旋转到'\0'
。
此
for (i = 1; i <= 11; i++) { /* array index starts from 0 */
dest[i] = source [i];
}
应该是
for (i = 0;source[i]; i++) { /* when \0 encounters, loop terminates */
dest[i] = source [i];
}