我环顾四周,在其他问题上找不到问题的解决方案。出于某种原因,当我运行程序时,我得到分段错误,这似乎是因为我正在更改给出字符串。我尝试将指针传递给char指针并进行编辑,但无济于事。
void rm_char(char* word, int pos){
printf("before: %s\n", word);
int len = strlen(word);
int i;
i = pos;
while(word[i+1] != '\0'){
word[i] = word[i+1];
i++;
}
word[i] = '\0';
printf("after: %s\n", word);
}
int main(void){
rm_char("juanpablo", 2);
}
答案 0 :(得分:0)
来自C标准(6.4.5字符串文字)
7未指明这些阵列是否与它们不同 元素具有适当的值。 如果程序尝试 修改这样的数组,行为是未定义的。
要逃避错误,您可以调用函数
Scanner scan = new Scanner(new File("credentials.txt"));
while (scan.hasNextLine() && !found)
{
String[] userNpwd = scan.nextLine().split(",");
if(userNpwd.length() == 2)
{
tempUser = userNpwd[0];
tempPass = userNpwd[1];
if(tempUser.trim().equals(userName.trim()) && tempPass.trim().equals(userPass.trim()))
{
found = true;
System.out.println("success");
}
}
}
考虑到最好为第二个参数使用类型char s[] = "juanpablo";
rm_char( s, 2 );
而不是类型size_t
,并将变量int
用于
len
未在函数中使用。
该函数应声明为
int len = strlen(word);
这是一个示范程序
char * rm_char(char* word, size_t pos);
它的输出是
#include <stdio.h>
#include <string.h>
char * rm_char(char *word, size_t pos)
{
size_t n = strlen( word );
if ( pos < n )
{
//memmove( word + pos, word + pos + 1, n - pos );
do
{
word[pos] = word[pos+1];
} while ( word[pos++] );
}
return word;
}
int main(void)
{
char word[] = "juanpablo";
puts( word );
puts( rm_char( word, 2 ) );
return 0;
}