1
回答
仿造strncpy写的copy_n的程序,但是字符串常量不是不可赋值的吗?那应该怎么办?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

我自己写的代码如下:

#include <stdio.h>

char *copy_n(char *dst, char *src, int n){
	int len = strlen(src);
	char *start = dst;
	if (len <= n){
		while (*dst++ = *src++){
			;
		}
		while (len < n){
			*dst++ = '\0';
			n--;
		}
	}
	else{
		while (n--){
			while (*dst++ = *src++){
				;
			}
		}
		*dst = '\0';
	}
	
	return start;
}

int main(void)
{
	char *dst = "hello";
	char *src = "python";
	copy_n( dst, src, 4 );
	printf("%s\n", dst);

	return 0;
}
很悲催的发现,字符串常量不能被赋值,那么如果我非要copy_n成功的话,那应该如何编写代码呢??

<无标签>
举报
fzyz_sb
发帖于4年前 1回/177阅
共有1个答案 最后回答: 4年前
char *dst = "hello";
char *src = "python";

des/src are string literals, they are same as 'char* const`, which means you are not allowed to modify dst/src. you could fix your code by updating dst/src to:

char dst[] = "hello";
char src[] = "python";
btw, I haven't read your copy_n logic


--- 共有 2 条评论 ---
fzyz_sb但是我觉得char *str = "hello";应该等价于char const *str = "hello";而不是char * const str = "hello"; 4年前 回复
fzyz_sb谢谢你的提醒。字符串常量无法改变,我是新手,还纠结于这个问题,但是后面用字符数组就可以了。 4年前 回复
顶部