我想从字符串中替换一个字符(例如第二个字符)。 我的代码出了什么问题?它可以编译,但不是做我需要的,它给我一个Segmentation错误。谢谢!
function changeImage(el) {
$(el).fadeIn( "slow", function() {
if (el.value == "samsung"){
document.getElementById("IzabranUredjajSl").src = "Slike/uredjajSamsung.png";
document.getElementById("prom_vr_kara").innerHTML = "- 5.1” / 2560x1440 ekran <br/> - 12 MP / 5 MP kamere <br/> - Octa-core / 4 GB platforma <br/> - do 32 GB memorije ";
}
else if(el.value == "apple"){
document.getElementById("IzabranUredjajSl").src = "Slike/uredjajApple.png";
document.getElementById("prom_vr_kara").innerHTML = "- 4.7” / 1334x750 ekran <br/> - 12 MP / 7 MP kamere <br/> - Quad-core / 2 GB platforma <br/> - do 32 GB memorije ";
}
});
}
编译完代码后
#define _XOPEN_SOURCE
#include <unistd.h>
#include <stdio.h>
#include <cs50.h>
#include <string.h>
int main (int argc, string argv[])
{
string key="abcd";
key[1]='f';
}
答案 0 :(得分:0)
string key="abcd";
string
基本上是char *
,key
是字符串文字。您尝试修改它,因此分段错误。
答案 1 :(得分:0)
我没有看到名称string
的定义,但我认为它类似于char *
。
因此在此声明中
string key="abcd";
声明了一个指向字符串文字的指针。
字符串文字在C中未经修改,任何修改字符串文字的尝试都会导致未定义的行为。
来自C标准(6.4.5字符串文字)
7未指明这些阵列是否与它们不同 元素具有适当的值。 如果程序尝试 修改这样的数组,行为是未定义的。
答案 2 :(得分:0)
你只能修改堆或堆栈中的内存,你的"abcd"
就是所谓的String Literal并且属于程序的只读内存空间,它不能被修改它在哪里(不管它是否在任何体面的操作系统下运行)。
它放在那里的原因是因为string
基本上只是一个char *
指针,它会指向任何内存空间并且不关心它是否&& #39; s是否在只读空间中。 (不要与C ++ std::string
混淆。)
为了使其可以修改,你必须告诉C它不是指针,而是数组。
char key[] = "abcd";
现在C将把这个字符串放在堆栈中,你可以随意修改它。