c - 如何在不更改原始字符串的情况下编辑字符串的副本
问题描述
我正在尝试反转一个字符串,即如果原始字符串是 12345,我想输出 54321。我认为复制原始字符串并编辑副本会很好,但是在 for 循环内(我尝试交换元素;我已经放置了一个标记“HERE”),原始字符串和字符串的副本都得到了编辑。有人可以向我解释为什么会这样吗?谢谢
char* reverseTheNumber (char* originalNumber){
int lengthOfInputString = (strlen( originalNumber) - 1);
char* copyOfOriginalNumber = originalNumber;
int replacementIndex = lengthOfInputString; //index of original input to be swapped
for (int i = 0; i <= (lengthOfInputString); i++){
//swap the character; 1st for last, 2nd for 2ndlast, etc
copyOfOriginalNumber[i] = originalNumber[replacementIndex]; //HERE
replacementIndex -= 1;
}
return copyOfOriginalNumber;
}
解决方案
记住这不会复制是非常重要的:
char* copyOfOriginalNumber = originalNumber;
这会复制指针并且不会触及字符串数据。
你想要的是:
char* copyOfOriginalNumber = strdup(originalNumber);
不要忘记最终free()
这个副本是有责任的。
推荐阅读
- java - Spring Boot Rest 模板 Mocking:ResponseEntity.getBody() 抛出 Null 指针异常
- python - 在 Python 中:将 EPS 文件转换为带有 alpha 通道且无抗锯齿的 PNG
- r - 如何在R中实现一个带有总和的函数?
- amazon-web-services - AWS quicksight 和 influx db
- python - 根据熊猫数据框中的顺序重新排列列
- java - spring-data下执行postgresql函数出错
- salesforce - 访问 SalesForce 外部的富文本字段图像?
- openid-connect - OKTA:在 Okta 中验证 OIDC 配置的 clientId 和 clientSecret
- c++ - C++:在运行时找出自定义类的类型
- flutter - 向带有文本的图像添加一个按钮,以便它可以导航到颤动的下一页