![](/img/trans.png)
[英]How can I allocate memory in the Linux kernel for a char* type string?
[英]How can I change “\n” from to “ ” in char* string type?
char* changeEntertoSpace(char* s) {
char* begin;
begin = s;
while (*begin != NULL) {
if (*begin=="\n") {
//*begin = " ";
strcpy(begin," ");
}
begin++;
}
s = begin;
return s;
}
這是我的代碼,我嘗試將文本字符串s
中的<Enter>更改為<Space> 。 但這不起作用。
你能幫我理解我的錯誤是什么嗎?
為了替換字符串中的單個字符, strcpy()
是錯誤的選擇,因為它總是 append 字符串終止符 ( '\0'
) 在復制字符串的末尾。
這可能是替換后的字符串'\n'
似乎消失的原因。
您只需替換單個字符:
char * changeEnterToSpace(char* s) {
char * begin;
begin = s;
while (*begin != '\0')
{
if (*begin=='\n')
{
*begin = ' '; // Substituting the single character
}
begin++;
}
// s = begin;
return s;
}
您在嘗試strcpy()
之前評論的作業幾乎是正確的。 您使用雙引號將空格括起來,但在 C 中,單個字符用單引號括起來: char c = 'a'
。
請注意,為了找到要替換的字符,可以使用標准strchr()
function (手冊頁)。
注意:我還評論了s = begin;
分配,這將使您的 function 返回一個空字符串。 相反,您可能希望在換行符替換后返回原始字符串。
strchr()
是您需要的 function。 它在字符串中查找一個字符並返回一個指向第一次出現的指針。 您可以循環您的字符串以查找和替換所有'\n'
字符。
代碼可能像:
#include <string.h>
char* changeEntertoSpace(char* s) {
while(1) {
char* found = strchr(s, '\n');
if (found == NULL) {
break;
} else {
*found = ' ';
}
}
return s;
}
// --------------------------------------
#include <stdio.h>
int main()
{
char value[] = "hello,\nworld\n,what's up?";
puts(value);
changeEntertoSpace(value);
puts(value);
}
您可以稍微優化 function:
char* changeEntertoSpace(char* s) {
char* found = s;
while(1) {
found = strchr(found, '\n');
if (found == NULL) {
break;
} else {
*found = ' ';
}
}
return s;
}
這樣,您不會每次都搜索整個字符串,而只是搜索出現后的部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.