我是C的新手,也是为了那个缘故的指针,所以一些帮助会非常棒。当我尝试运行此代码时,我的程序已多次崩溃 我的方法punkt_paa_linje返回一个整数而不是字符串,因为我假设指针。我对指针的理解非常模糊,所以非常感谢解释
char punkt_paa_linje(int linje_1[3], int linje_2[3], int punkt[3])
{
int i;
double t1;
double t2;
double t3;
for(i = 0; i < 3; i = i + 1 ){
double t = (punkt[i]-linje_1[i])/linje_2[i];
if(i == 0){
t1 = t;
} else if (i == 1){
t2 = t;
} else if (i == 2){
t3 = t;
}
}
if(t1 == t2 && t2 == t3){
return "true";
} else {
return "false";
}
}
当我调用该函数时,它返回36
int main()
{
int et[] = {1,2,3};
int to[] = {4,5,6};
int tre[] = {7,8,9};
printf("%d\n", punkt_paa_linje(et, to, tre));
return 0;
}
编辑:我没有插入错误消息的原因是因为没有
答案 0 :(得分:3)
您应该使用char *punkt_paa_linje(int linje_1[3], int linje_2[3], int punkt[3])
代替char punkt_paa_linje(int linje_1[3], int linje_2[3], int punkt[3])
。
并使用printf("%s\n", punkt_paa_linje(et, to, tre));
。然后您的代码将完美运行并输出true
。
否则尝试:
#include <stdio.h>
int punkt_paa_linje(int linje_1[3], int linje_2[3], int punkt[3])
{
int i;
double t1;
double t2;
double t3;
for(i = 0; i < 3; i = i + 1 ){
double t = (punkt[i]-linje_1[i])/linje_2[i];
if(i == 0){
t1 = t;
} else if (i == 1){
t2 = t;
} else if (i == 2){
t3 = t;
}
}
if(t1 == t2 && t2 == t3){
return 1;
}
else {
return 0;
}
}
int main()
{
int et[] = {1,2,3};
int to[] = {4,5,6};
int tre[] = {7,8,9};
printf("%d\n", punkt_paa_linje(et, to, tre));
return 0;
}
输出:
1
答案 1 :(得分:2)
我会尝试解释你的错误。
您正在尝试返回string
字面值。其中静态存储空间内存中的类型为const char*
及其字符序列,如下所示
n n+1 n+2 n+3 n+4 <-- Addresses
+---+---+---+---+----+
|'t'|'r'|'u'|'e'|'\0'|
+---+---+---+---+----+
你试图通过char
返回此字符串,内存中一个字节,就像这样
n
+---+
|'t'|
+---+
所以你必须返回string
而不是char
,其中字符串通过指针传递给C
中的第一个字符。
const char * punkt_paa_linje(int linje_1[3], int linje_2[3], int punkt[3])
...
return "true";
%d
说明符需要int
类型的参数,而您的函数现在返回string
,其具有说明符%s
。
printf("%s\n", punkt_paa_linje(et, to, tre));
C
中的数组作为指针传递,因此使用int linje_1[3]
或int * linje_1
只需使用int linje_1[]
或<script async defer src="https://maps.googleapis.com/maps/api/js?key=my api key=google-map" type="text/javascript"></script>
而不是参数 //Google Map
var latitude = $('#google-map').data('latitude')
var longitude = $('#google-map').data('longitude')
function initialize_map() {
var myLatlng = new google.maps.LatLng(latitude,longitude);
var mapOptions = {
zoom: 14,
scrollwheel: false,
center: myLatlng
};
var map = new google.maps.Map(document.getElementById('google-map'), mapOptions);
var contentString = '';
var infowindow = new google.maps.InfoWindow({
content: '<div class="map-content"><ul class="address">' + $('.address').html() + '</ul></div>'
});
var marker = new google.maps.Marker({
position: myLatlng,
map: map
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map,marker);
});
}
google.maps.event.addDomListener(window, 'load', initialize_map);
});
,它将接受所有数组长度。
Here is live demo. 只需点击运行: - )
答案 2 :(得分:1)
你应该调用你的函数char *punkt_paa_linje
,因为这里只返回一个字符,你需要一个str,这是char *
类型。
因此,如果您真的希望您的函数返回char
,请将其调用char punkt_paa_linje
答案 3 :(得分:0)
从c中的函数返回字符串时有很多事情: - 1.Never从函数返回字符串局部变量,因为函数的所有局部变量都将存储在堆栈中,一旦函数返回,堆栈将被销毁,因此本地变量现在将无效。 2.如果你想重新使用字符串功能,你应该使用: - 1.记忆。 2.static变量。 3.String constant literal。
在您的示例中,如果要返回字符串,则应使用char *作为函数的返回类型。 char * punkt_paa_linje()
代替在代码中使用%f中的%d,使用%s打印字符串。 printf(&#34;%s \ n&#34;,punkt_paa_linje(et,to,tre));